我过去使用过 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})' & "
但是想知道我是否在后台作业中做错了什么,