【heroku/ridgepole】herokuでridgepole/mysqlを動かす
herokuにrailsプロダクトをアップロードするにあたり、 ridgepoleでつまづいた
エラー1:[ERROR] No such file or directory @ rb_sysopen - /app/config/database.yml
ridgpoleを実行する際、下記コードを実行するのだが
heroku run 'bundle exec ridgepole -c config/database.for.heroku.ridgepole.yml -E production -f Schemafile --apply'
gitignoreで、database.ymlは、もちろんheroku上に上がっていない
そこでdatabase.for.heroku.ridgepole.yml
を作成し、このファイルをgitに含めて、herokuにアップロードする
中身はこれだけ
production: url: <%= ENV['DATABASE_URL'] %>
clearDBを使う時に設定した、環境変数から、勝手に接続情報を取ってきてくれる
後は、ridgepoleを実行するだけ
コマンド覚えるのが大変なので、lib/tasks/ridgepole.rake
を作成
namespace :ridgepole do desc "Exec Apply Dry Run" task applydryrun: :environment do exec "bundle exec ridgepole -c config/database.for.heroku.ridgepole.yml -E #{Rails.env} -f #{Rails.root}/Schemafile --apply --dry-run" end desc "Exec Apply" task apply: :environment do exec "bundle exec ridgepole -c config/database.for.heroku.ridgepole.yml -E #{Rails.env} -f #{Rails.root}/Schemafile --apply" end end
その上で、反映コマンドをうつ
heroku run rake ridgepole:apply
エラー2:#<RuntimeError: Missing secret_key_base
for ‘production’ environment, set this value in config/secrets.yml
>
エラー1と同じで、secrets.ymlをgitignoreしていて、herokuにあげていないのが問題 いいgemがあるので解決 github.com
gem installして後は
bin/rake heroku:secrets RAILS_ENV=production
すると、secrets.ymlを、herokuにアップしなくても、
secrets.ymlの内容を使える
まとめ
database.yml も secrets.ymlもgit管理するのは、嫌だが どうしてもherokuでridgepole使いたい時に