如何在生产环境中自动启动Rails后台工作程序

时间:2016-07-19 14:21:08

标签: ruby-on-rails ruby ruby-on-rails-4 rubygems

我发现我在开发环境中手动启动后台工作程序。

如果我的后台工作人员没有运行,我的付款/交易将无法成功。

  

我做了什么

     

我创建了一个Procfile,在里面我有以下这样的我   以下是:

应用程序名称/ Procfile

worker: bundle exec rake jobs:work 

如果我部署我的应用程序,这实际上会解决我的问题吗?如果没有,如何在生产中启动后台工作者?

更新

我已经被要求从已发布的答案中订购,Procfile仅适用于 Heroku 。请注意 我喜欢部署到DigitalOcean 。我正在为我的后台工作者使用Delayed_Job,在其文档中,它声明我们可以在生成时使用以下代码,并将"daemons" gem捆绑在一起。

RAILS_ENV=production script/delayed_job start
RAILS_ENV=production script/delayed_job stop

无论如何,我可以通过启动它来自动执行此操作,例如env。拿起要执行的代码?

1 个答案:

答案 0 :(得分:0)

Procfile仅适用于heroku。因此,如果要部署到Heroku,请跳过我的其余部分。

如何操作取决于您正在部署的系统。大多数现代linux系统(即Ubuntu)使用systemd。所以你很可能需要创建启动脚本并将其放到/lib/systemd/system/__your_service__.service

仅举例来说

[Unit]
Description=__Your worker_name__

[Service]
Type=forking
User=__your_user__
WorkingDirectory=__your_working_dir__
Environment=RAILS_ENV=production
PIDFile=__your_working_dir__/tmp/pids/__your_service__.pid
ExecStart=absolute_path_to_bundle exec rake jobs:work 

[Install]
WantedBy=multi-user.target

然后输入并且你很好:)

sudo systemctl enable __your_service__ && sudo systemctl start __your_service__