Travail retardé avec acts_as_ferret en mode de production
-
16-09-2019 - |
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:
-
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)
-
got ferret configuré via des modèles?
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