背景
個人アプリを開発していて、現状はローカル環境と本番環境しか用意していなかった。
本来であればstaging環境で確認後、本番環境にデプロイする流れが望ましいため、staging環境を準備することにした。
前提
- Herokuで本番環境が用意できている。
手順
staging環境の作成
heroku create --remote staging
これでstaging環境が作成される。
参考記事
本番環境の環境変数をインポート + stagingの環境変数にセットする。
heroku config -s -a "本番環境のアプリ名" > envvars.txt
cat envvars.txt | tr '\n' ' ' | xargs heroku config:set -a "staging環境のアプリ名"
CLEARDB_DATABASE_URL、DATABASE_URL、DB_NAME、DB_USERNAME、DB_PASSWORD、DB_HOSTNAME
もコピーしてしまっているが、そちらは削除しておく。
参考記事
cat envvars.txt | tr '\n' ' ' | xargs
の解説
cat envvars.txt
でインポートした本番環境の環境変数のファイルを出力する。
tr '\n' ' '
でennvars.txtの改行部分を空白に置換する。
xargs
コマンドでcat envvars.txt | tr '\n' ' '
の結果を受け取って、次のコマンドの引数に渡してくれる。
参考記事
MySQLアドオンを追加する。 + stagingの環境変数の修正
heroku addons:create cleardb:ignite --remote staging
CLEARDB_DATABASE_URL
から、
DATABASE_URL、DB_NAME、DB_USERNAME、DB_PASSWORD、DB_HOSTNAME
の環境変数をセットする。
例: heroku config:set DB_NAME=xxxx --remote staging
RAILS_ENV
とRACK_ENV
をstagingに変更する。
heroku config:add RACK_ENV=staging --remote staging
heroku config:add RAILS_ENV=staging --remote staging
staging.rbを用意する。
cp config/environments/production.rb config/environments/staging.rb
# 下記のように修正
config.action_mailer.default_url_options = { protocol: 'https', host: 'stagingのアプリ名' }
staging環境にデプロイする。
git push staging master
staging環境のDBを作成する。
heroku run rake db:migrate --remote staging
staging環境のアプリ名を変更する。
heroku apps:rename "変更したいアプリ名" --remote staging
参考記事
以上で完了。
最後に
今回は取り急ぎstaging環境を用意することだけを行ったが、今後は
- プルリクを出したら自動的にstaging環境にデプロイされるようにする。
- 本番環境のデータと1日おきに同期する。
などといったことにも挑戦していきたい。