HerokuをRailsアプリのステージング環境として使う

執筆日:

更新日:

趣味で作っているアプリ(Rails)があるのだが、はじめHerokuで運用しようと検討していたが、
データ量が多いためすぐにHobbyプランでは対応できなくなってしまった。
仕方ないので、別のアプリで持っているVPSをProduction環境とすることにしたのだが、
せっかくなのでherokuもうまく使いたいなーと思ってステージング環境として使うことにした。

そのときにやったことをメモする。

Staging環境の設定を作る

Railsではデフォルトではdevelopment, test, productionの環境を持っている。
そこに今回、stagingという環境を追加した。
そして、herokuではデフォルトではproductionを利用するようになっているのでstagingに切り替えるだけ。

Rails側はstaging環境追加。

$ vim config/database.yml
# 下記を追加した
staging:
  <<: *default
  adapter: postgresql
  encoding: unicode
  database:
  pool: 5
  username:
  password:

$ vim config/enviroments/staging.rb
# 基本的にはproduction.rbをコピーし、必要に応じて設定を変更

$ vim config/secrets.yml
# 必要に応じてstagingを追加 

heroku側はステージングへの切り替え。

$ heroku config --app app-name    # デフォではproductionになってる
RAILS_ENV:                production
$ heroku config:set RAILS_ENV=staging --app app-name
$ heroku config --app app-name
RAILS_ENV:                staging 

Basic認証

ステージング環境なので、外部から簡単にアクセス出来ないようにBasic認証をかけた。
いくつかやり方があると思うが、app/controllers/application_controller.rbに設定を追加した。
ユーザ名とパスワードをベタ書きだとGithubに上げてる場合は丸見えになってしまうので環境変数でやりましょう。

http_basic_authenticate_with :name => ENV['BASIC_AUTH_USERNAME'], :password => ENV['BASIC_AUTH_PASSWORD'] if Rails.env == "staging"

heroku側では環境変数を設定してあげる。

$ heroku config:set BASIC_AUTH_USERNAME="xxxxx" BASIC_AUTH_PASSWORD="xxxxx" --app app-name
$ heroku config --app app-name
BASIC_AUTH_PASSWORD:      xxxxx
BASIC_AUTH_USERNAME:      xxxxx 

Github連携で自動デプロイ

今更ながらGithubと連携した自動デプロイ機能があることを知った…
Githubgit push origin masterすればheroku側にも反映される機能だ。
昔使った時にはgit push origin mastergit push heroku masterと2回コマンド打ってたのでめんどいなーと思ってた。
デプロイが楽なのでステージング環境としてはほんとに優秀だと思う。

[heroku]githubから自動でherokuにデプロイ - KayaMemo

記事の内容に関連した相談、仕事依頼したい New

記事の内容やクラウドネイティブ技術に関する相談、仕事依頼を開始しました。
仕事依頼、相談をしてみる

フィードバック

本記事に対して、フィードバックあればこちらのフォームからご記入ください。
記事の内容にフィードバックしてみる

このエントリーをはてなブックマークに追加