Вопрос

Я получаю следующую ошибку при запуске задачи через 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'
...

Из ошибки видно, что Delay_job не смог найти Ferret_server.Однако когда я запускаю эту же задачу с консоли в производственном режиме, она работает нормально.Любые идеи о том, как я могу гарантировать, что Delayed_job имеет:

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

  2. настроили хорька через модели?

Это было полезно?

Решение

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

В определении вашего работника (что-то вроде RAILS_ROOT/lib/worker.rb) и модели Post вам следует включить такую ​​строку:

class Worker < Struct.new(:stuff)
  def perform
    Post.disable_ferret
    <do some stuff>
    .
    .
    .
  end
end
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top