当我通过DelayedJob运行我的任务时出现以下错误:
closed stream
/usr/lib/ruby/1.8/drb/drb.rb:961:in `select'
/usr/lib/ruby/1.8/drb/drb.rb:961:in `alive?'
/usr/lib/ruby/1.8/drb/drb.rb:1211:in `alive?'
/usr/lib/ruby/1.8/drb/drb.rb:1168:in `open'
/usr/lib/ruby/1.8/drb/drb.rb:1166:in `each'
/usr/lib/ruby/1.8/drb/drb.rb:1166:in `open'
/usr/lib/ruby/1.8/drb/drb.rb:1163:in `synchronize'
/usr/lib/ruby/1.8/drb/drb.rb:1163:in `open'
/usr/lib/ruby/1.8/drb/drb.rb:1092:in `method_missing'
/usr/lib/ruby/1.8/drb/drb.rb:1110:in `with_friend'
/usr/lib/ruby/1.8/drb/drb.rb:1091:in `method_missing'
/usr/lib/ruby/gems/1.8/gems/acts_as_ferret-0.4.3/lib/remote_index.rb:31:in `<<'
/usr/lib/ruby/gems/1.8/gems/acts_as_ferret-0.4.3/lib/instance_methods.rb:90:in `ferret_update'
...
从错误中可以看出delayed_job无法找到ferret_server。但是,当我在生产模式下从控制台运行此SAME任务时,它工作正常。任何想法我如何确保delayed_job有:
真正加载了生产环境。我在脚本/ delayed_job中设置了RAILS ['ENV]] ='production'来确保这一点。 (我想这应该是好的)
通过型号配置了雪貂?
答案 0 :(得分:0)
这也发生在我身上。您需要在延迟作业运行期间禁用索引。
在你的工作定义中(类似于RAILS_ROOT / lib / worker.rb),给定一个名为Post的模型,你应该包含这样的一行:
class Worker < Struct.new(:stuff)
def perform
Post.disable_ferret
<do some stuff>
.
.
.
end
end