Herokuは、リリースプロセスを維持するためにProcfile
に依存しません。 Herokuビルドスタックがあります。
foreman
は私たちに順番でプロセスを実行していない、同時に複数のプロセスを実行するための方法を提供しますので、あなたの問題は、しかしforeman
の責任ではないので、あなたがそうする他のいくつかの方法があります。
シンプル:foreman
は、シェルコマンドを使用してプロセスを開始することができるので、あなたはあなたのプロセス
db_process: start_db_script.sh
migrarion_process: sleep 5; bundle exec rake db:migrate --trace
フルコントロールを遅延させる(秒)の基本的なシェルコマンドsleep
を使用することができます。代わりに、実行時のデフォルトの移行のrakeタスクを実行する前に、移行を実行する前にデータベースへの接続を確認する別のレーキタスクを書くことができます(this answer参照)
retried = 0
begin
# Establishes connection
ActiveRecord::Base.establish_connection
# Try to reconnect
# It will raise error if cannot reach your database
ActiveRecord::Base.connection.reconnect!
Rake::Task["db:migrate"].invoke if ActiveRecord::Base.connected?
rescue => e
retried += 1
if retried <= 5 # Retry only 5 times
sleep 1 # Wait 1 seconds before retry
retry
end
puts "#{e} Cannot connect to your database with 5 seconds"
end