Question

Je reçois l'erreur suivante lorsque je lance ma tâche 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'
...

De l'erreur de son évident que delayed_job n'a pas pu trouver le ferret_server. Cependant, quand je lance cette tâche MEMES console en mode de production, il fonctionne très bien. Toute idée comment je peux faire en sorte que delayed_job a:

  1. vraiment chargé l'environnement de production. Je mets RAILS [ 'ENV]] = 'production' dans le script / delayed_job à cet effet. (Je suppose que cela devrait être bon)

  2. got ferret configuré via des modèles?

Était-ce utile?

La solution

Ce qui est arrivé à moi aussi. Vous devez désactiver l'indexation ferret pendant le déroulement du travail retardé.

Dans votre définition de travailleur (quelque chose comme RAILS_ROOT / lib / worker.rb), et donné un modèle appelé Post, vous devez inclure une ligne comme ceci:

class Worker < Struct.new(:stuff)
  def perform
    Post.disable_ferret
    <do some stuff>
    .
    .
    .
  end
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top