出于生产目的,我需要运行三个进程。这是我的程序文件,我用福尔曼启动它们:

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等分别对其进行管理。

09-27 17:51