BackgroundJobs完成后停止工作

时间:2011-01-06 02:03:02

标签: ruby ruby-on-rails-plugins background-process

我过去曾使用过Delayed_job。我有一个旧的项目在服务器上运行,我无法从Ruby 1.8.6升级到1.8.7,因此无法使用延迟作业,所以我正在尝试BackgroundJobs http://codeforpeople.rubyforge.org/svn/bj/trunk/README

我让它工作,以便我的工作运行,但有些事情似乎不对。例如,如果我像这样运行这个工作:

jobs = Bj.submit "echo hi", :is_restartable => false, :limit => 1, :forever => false

然后我在bj_job表中看到了这个工作,我发现它和stdout中的'hi'一起完成了。我还看到表中只有一个作业,并且它不会继续重新运行它。

出于某种原因,如果我这样做:

jobs = Bj.submit "./script/runner ./jobs/calculate_mean_values.rb #{self.id}", :is_restartable => false, :limit => 1, :forever => false

作业仍然按预期完成,但是,它继续在bj_job表中插入新行,并且该方法反复运行,直到我停止我的dev服务器。它是如何工作的?

我正在使用Ruby 1.8.6和Rails 2.1.2,我没有升级选项。我正在使用Bj的插件味道。

因为我只需要在保存模型后运行一次该过程,所以我可以直接使用脚本/运行器来完成它:

system " RAILS_ENV=#{RAILS_ENV}   ruby  #{RAILS_ROOT}/script/runner   'CompositeGrid.calculate_values(#{self.id})'  & "

但是想知道我是否在背景工作中做错了什么,

1 个答案:

答案 0 :(得分:1)

好的,这是一个愚蠢的用户错误。事实证明,我有一个回调,重新启动过程并创建一个无限循环。修复回调后,它完全按预期工作。