2009-11-05 1 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. Однако, когда я запускаю эту САМУЮ задачу с консоли в режиме производства, она работает нормально. Любые идеи, как я могу гарантировать, что delayed_job имеет:

  1. действительно загружен в производственную среду. Для этого я установил RAILS ['ENV]] =' production 'в script/delayed_job. (Я думаю, это должно быть хорошо)

  2. получил хорек, настроенный через модели?

ответ

0

Это случилось со мной. Вам нужно отключить хорек от индексации во время работы отложенной работы.

В вашем определении рабочих (что-то вроде RAILS_ROOT/Lib/worker.rb), и учитывая модель под названием Post, вы должны включить следующую строку:

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