hamayuzinの日記

エンジニアとかデータサイエンティストとかやってます。あの時 あれやってたな的な備忘録にできれば。

【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使いたい時に