2009-11-05 15 views
0

我收到以下错误,当我通过DelayedJob运行我的任务:DelayedJob与acts_as_ferret在生产模式

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的有:

  1. 真正加载的生产环境。我在脚本/ delayed_job中设置了RAILS ['ENV]] ='production'来确保这一点。 (我猜这应该是好的)

  2. 通过模型配置了雪貂吗?

回答

0

这也发生在我身上。在延迟作业运行期间,您需要禁用索引。

在你的工人定义(像RAILS_ROOT/lib目录/ worker.rb),并给出了一个名为Post模型,你应该包括这样一行:

class Worker < Struct.new(:stuff) 
    def perform 
    Post.disable_ferret 
    <do some stuff> 
    . 
    . 
    . 
    end 
end