あまり需要のないテーマかもしれませんが、
Production/Staging/Development/Test
という4つの環境があるときに、
「動作確認のため、もう1つStaging環境が欲しい。インスタンス新しく作るとお金かかるし、手軽に実現したい」
というような時のためのメモです。
なお、Rails5, sidekiq, Elasticache, RDSを使っています。
手順は
1, gem 'redis-namespace' 追加
2, config/database.ymlに新しいenv(以後new_envと呼ぶ)
3, config/secrets.ymlにnew_envのsecret_key_baseを追加
4, config/environment/new_env.rbを追加
5, config/settings.ymlにstagingを追加
6, config/initializers/cors.rbでAPIを制御
(2~6は通常のenvを追加する手順、こちらを参照)
7, config/initializers/sidekiq.rbを編集
8, envで環境変数を設定
6,7を解説します。
sidekiq.rbを編集
Elasticacheの新たなインスタンスを立てずとも、以下のようにnamespaceを書くと、redisの〇〇-staging内で勝手に分けてくれるらしいです。すごい。
Sidekiq.configure_server do |config|
config.redis = { url: 'redis://hego', namespace: "sidekiq_#{Rails.env}" }
end
Sidekiq.configure_client do |config|
config.redis = { url: 'redis://hoge', namespace: "sidekiq_#{Rails.env}" }
end
envで環境変数を設定
新しい環境を作ったからといっても、動作確認用の環境なら新たなDBインスタンスを立てるまでもありません。RDSの〇〇-stagingというDBの中にrds_stagingとrds_new_envというデータベースを作れば、あとは環境変数のRDS_DB_NAMEを変えるだけです。
RDS_DB_NAME=rds_new_env
この辺りの経験値が少ないので、間違いなどご指摘ありましたらよろしくお願いいたします。