Heroku + Rails の認証付きステージング環境を構築する方法を内容をご紹介します。
Herokuはデータベースが5MB以下であれば無料でWebアプリケーションを運営できるので、本番環境に反映する前のテスト用としてステージング環境を構築しておくと便利です。
ローカル環境では問題なくても、Herokuの本番環境ではちゃんと動作しない場合があるので、ステージング環境でテストしてから本番環境に反映した方が良さそうです。
$ heroku create myapp-staging --stack cedar --remote staging
—remote stagingで、リモートリポジトリ名を”staging”としています。
production用の設定ファイルをステージング環境用にコピーします。
$ cp config/environments/production.rb config/environments/staging.rb
ステージング環境では、開発用に下記のように変更します。
■ config/environments/staging.rb
# Full error reports are disabled and caching is turned on
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
Herokuの環境変数 RACK_ENV は、デフォルトが”production”になっているので、“staging”に変更します。
heroku config:add RACK_ENV=staging --app myapp-staging
Rails3.1系を使うために Cedarスタックを使ってる場合は RAILS_ENV を変更します。
heroku config:add RAILS_ENV=staging --app myapp-staging
$ git commit -am 'create staging enviroment'
$ git push staging master
$ heroku rake db:migrate --app myapp-staging
本番環境のマイグレーションではアプリケーション名の指定はしてませんでしたが、リモートリポジトリが2個以上になったら指定する必要が出てきます。
なので、Herokuコマンドを実行するときは、本番環境は”—app myapp”、ステージング環境は”—app myapp-staging”を指定する必要があります。
app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_filter :password_protected if Rails.env.staging?
protected
def password_protected
authenticate_or_request_with_http_basic do |username, password|
username == "spam" && password == "spam_pw"
end
end
end
実行環境が”staging”の時のみ、認証がかかるようになります。(ユーザ名:spam、パスワード:spam_pw)
以上です。
・Herokuで認証付きのステージング環境を構築する - exdesign
・Herokuでステージング環境を作る - アインシュタインの電話番号☎
・Herokuで作るFacebookアプリ:第7回 Herokuをもっと活用しよう!|gihyo.jp … 技術評論社
・Heroku で複数の環境( production, staging など)を使い分けたいときー - LazyLoadLife