我想在foreman
中运行数据库和迁移。但是,我发现它们通常在我开始foreman
的同时运行。由于我在运行迁移时数据库尚未完全启动,因此导致迁移失败。
使用Procfile
的Heroku可以促进发布阶段。在运行所有命令后运行阶段。我可以在计算机上使用领班做同样的事吗?
答案 0 :(得分:1)
Heroku不依赖于Procfile
来维持发布过程。 Heroku构建堆栈。
由于foreman
为我们提供了同时运行多个流程的方法,而不是按顺序运行流程,因此您的问题不是foreman
的责任
但是,您还有其他一些方法可以这样做。
简单:由于foreman
可以使用shell命令启动您的进程,因此您可以使用基本的shell命令sleep
(以秒为单位)来延迟您的进程
db_process: start_db_script.sh
migrarion_process: sleep 5; bundle exec rake db:migrate --trace
完全控制:您可以编写另一个rake任务,而不是运行默认迁移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