Heroku + Rails の認証付きステージング(staging)環境を構築する方法

Heroku + Rails の認証付きステージング環境を構築する方法を内容をご紹介します。

Heroku

Herokuはデータベースが5MB以下であれば無料でWebアプリケーションを運営できるので、本番環境に反映する前のテスト用としてステージング環境を構築しておくと便利です。

ローカル環境では問題なくても、Herokuの本番環境ではちゃんと動作しない場合があるので、ステージング環境でテストしてから本番環境に反映した方が良さそうです。

ステージング用Herokuアプリの追加

$ heroku create myapp-staging --stack cedar --remote staging

–remote stagingで、リモートリポジトリ名を”staging”としています。

設定ファイル staging.rb の作成・編集

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/RAILS_ENV の変更

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

 

ステージング用アプリをHerokuにデプロイ

$ git commit -am 'create staging enviroment'
$ git push staging master

 

データベースのマイグレーション

$ heroku rake db:migrate --app myapp-staging

本番環境のマイグレーションではアプリケーション名の指定はしてませんでしたが、リモートリポジトリが2個以上になったら指定する必要が出てきます。

なので、Herokuコマンドを実行するときは、本番環境は”–app myapp”、ステージング環境は”–app myapp-staging”を指定する必要があります。
 

Basic認証の実装

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