Run delayed jobs after deployed on production server

别等时光非礼了梦想. 提交于 2019-12-31 04:51:06

问题


With the delayed_jobs gem(https://github.com/collectiveidea/delayed_job) in rails, I am able to queue my notifications. But I don't quite understand how can I run the queued jobs on the production server. I knew I can just run

$ rake jobs:work

in the console for the local server. As the documentation said, You can then do the following:

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

# Runs two workers in separate processes.
RAILS_ENV=production script/delayed_job -n 2 start
RAILS_ENV=production script/delayed_job stop

# Set the --queue or --queues option to work from a particular queue.
RAILS_ENV=production script/delayed_job --queue=tracking start
RAILS_ENV=production script/delayed_job --queues=mailers,tasks start

# Runs all available jobs and the exits
RAILS_ENV=production script/delayed_job start --exit-on-complete
# or to run in the foreground
RAILS_ENV=production script/delayed_job run --exit-on-complete

My question is how to integrate it with my Rails app?I was thinking to create a file called delayed_jobs.rb in config/initializers as:

# in config/initializers/delayed_jobs
script/delayed_job start if Rails.env.production?

But I am not sure if it is the right way to do with it. Thanks


回答1:


The workers run as separate processes, not as part of your Rails application. The simplest way would be to run the rake task in a screen session to prevent it from quitting when you log out of the terminal session. But there are better ways:

You would use a system such as monit or God or run the worker script provided by delayed_job. You'll find more information in the answers to this question.




回答2:


In my experiencie I've found my solution using capistrano gem, which in words of the official doc

It supports the scripting and execution of arbitrary tasks, and includes a set of sane-default deployment workflows.

Basically it is a tool that helps you to deploy your app, including all of those task like starting/stoping queues, migrating the database, bundle new gems, and all of those thing that we usually do with ssh connection.

Here is a beutifull tutorial about capistrano and webfaction as hosting. And here is a nice module to blend capistrano and delayed_job. At the end you should only be concern about the development environment, because every time that you need to deploy to production, you'll do a commit to your repository and then

$ cap production deploy

Which will manage the whole production environment, stoping/restarting those queues, restarting the app, installing gems and everything that you can perform through the capistrano scripting way.



来源:https://stackoverflow.com/questions/15105436/run-delayed-jobs-after-deployed-on-production-server

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!