0

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

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

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 表中插入新行,并且该方法一遍又一遍地运行,直到我停止我的开发服务器。这是它应该如何工作的吗?

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

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

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

但是想知道我是否在后台作业中做错了什么,

4

1 回答 1

1

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

于 2011-01-07T23:44:29.217 回答