Pergunta

Eu recebo o seguinte erro quando eu executar minha tarefa via 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'
...

A partir do erro de sua evidente que delayed_job não conseguiu encontrar o ferret_server. No entanto, quando eu executar esta tarefa SAME a partir do console no modo de produção, ele funciona bem. Alguma idéia de como posso garantir que delayed_job tem:

  1. realmente carregado o ambiente de produção. I definir TRILHOS [ 'ENV]] = 'produção' no script / delayed_job para garantir isso. (Acho que isso deve ser bom)

  2. tem furão configurado via modelos?

Foi útil?

Solução

Isso aconteceu comigo também. Você precisa desativar o furão de indexação durante a execução da tarefa demorada.

Na sua definição trabalhador (algo como RAILS_ROOT / lib / worker.rb), e dado um modelo chamado Post, você deve incluir uma linha como esta:

class Worker < Struct.new(:stuff)
  def perform
    Post.disable_ferret
    <do some stuff>
    .
    .
    .
  end
end
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top