出于生产目的,我需要运行三个进程。这是我的程序文件,我用福尔曼启动它们:
web: bundle exec rails s Puma -p $PORT
queuing: bundle exec clockwork clock.rb
workers: bundle exec rake resque:workers
我用的是米娜。在部署任务结束时启动foreman的正确方法是什么?目前我开始这样做:
desc "Deploys the current version to the server."
task :deploy => :environment do
deploy do
invoke :'git:clone'
invoke :'deploy:link_shared_paths'
invoke :'bundle:install'
invoke :'rails:db_migrate'
invoke :'rails:assets_precompile'
to :launch do
queue "touch #{deploy_to}/tmp/restart.txt"
queue "bundle exec foreman start"
end
end
end
…但我不认为这是正确的方法,因为“mina deploy”命令从未成功退出,本地控制台只是开始输出这些进程正在执行的任何操作。
第二个问题:如何在单独的文件中分别初始化这三个进程的日志记录?
当其中一个进程崩溃时,我如何防止杀死这三个进程?如何使进程在崩溃时重新启动?
谢谢!
最佳答案
好的,这是3个问题。
1)我想你想把Foreman流程与终端分离。这样,部署过程将完成,即使在您断开与服务器的连接之后,foreman过程也将运行。nohup
非常适合这样做,例如,这将启动您的应用程序,并将所有日志传送到server.log
文件:nohup foreman start > server.log 2>&1 &
2)阿飞,福尔曼不让你这么做。您可能应该使用另一个流程管理服务(例如systemd、upstart)。谢天谢地,foreman允许您轻松地将配置导出为不同的流程管理格式(http://ddollar.github.io/foreman/#EXPORTING)。
3)同样,您可能希望分离流程,并通过upstart、systemd等分别对其进行管理。