与Mina和Foreman正确部署Rails应用程序

Mat*_*lič 5 ruby ruby-on-rails foreman mina

出于生产目的,我需要运行三个进程.这是我的procfile,我使用Foreman启动它们:

web: bundle exec rails s Puma -p $PORT
queuing: bundle exec clockwork clock.rb
workers: bundle exec rake resque:workers
Run Code Online (Sandbox Code Playgroud)

部署我正在使用Mina.在部署任务结束时启动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
Run Code Online (Sandbox Code Playgroud)

...但我不认为这是正确的方式,因为"mina deploy"命令永远不会成功退出,本地控制台只是开始输出这些进程正在做的任何事情.

问题二:如何在单独的文件中分别初始化这三个进程中的每个进程的日志记录?

当其中一个进程崩溃时,如何防止杀死所有这三个进程?如何在崩溃时重新启动进程?

谢谢!

mat*_*atb 0

好的,这是 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 等单独管理它们。