Rails上的延迟工作2:运行工作人员的更好方法是什么?

时间:2010-12-16 17:08:08

标签: ruby-on-rails delayed-job

我终于得到了Rails 2的DelayedJobs插件,它确实工作正常......只要我运行:

rake jobs:work

就像自述文件所说的那样,公平。

但是,这不符合我的要求......什么样的后台任务要求你打开一个shell,并运行一个命令?这就像不得不说脚本/服务器来运行我的rails应用程序,并且永远不会得到-d选项,所以即使在我关闭shell之后它也会继续运行。

是否有任何方法可以让工作人员在后台或守护进程模式下进行处理?

当我看到

时,我有一线希望
  

你也可以写一个简单的   @ script / job_runner @,并调用它   外部

自述文件中的行......但是......只是执行与rake任务完全相同的操作,你只需要用不同的方式调用它。

我想要的是什么:

我想启动我的rails应用程序,然后开始处理工作人员的任何事情,并且他们两个都在后台无形地运行,而不需要我照看它并保持启动它运行的shell。

(我的服务器是我通过SSH连接的,所以我不想让那个全天候运行的shell(特别是因为我喜欢一次又一次地关闭我的本地计算机)。)

有没有办法来实现这个目标?

4 个答案:

答案 0 :(得分:2)

您可以通过在其末尾添加&来在后台运行任何* nix命令:

rake jobs:work &

只需确保exit shell(或使用disown命令)将进程与登录会话分离...否则,如果会话断开连接,您拥有的进程将被终止用它。

答案 1 :(得分:0)

也许是Beanstalkd和Stalker?

  

Beanstalk是一种快速简便的后台任务排队方法。 Stalker为创建这些作业提供了一个很好的包装器界面。

有关详细信息,请参阅其上的railscast

编辑:

您还可以将该rake任务作为cronjob运行,这意味着服务器会定期运行它而无需您登录

答案 2 :(得分:0)

使用collectiveidea fork of delayed_job ...它更加积极地开发并且支持在守护进程中运行作业而不会有任何额外的麻烦。

答案 3 :(得分:0)

我的capistrano脚本调用

RAILS_ENV=production script/delayed_job start