Domanda

ottengo il seguente errore quando eseguo il mio compito attraverso 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'
...

Da l'errore è ovvio che delayed_job non riusciva a trovare il ferret_server. Tuttavia, quando si esegue questa operazione SAME dalla console in modalità di produzione, funziona benissimo. Tutte le idee come posso garantire che delayed_job ha:

  1. caricato davvero l'ambiente di produzione. Ho impostato RAILS [ 'ENV]] = 'produzione' nello script / delayed_job per garantire questo. (Credo che questo dovrebbe essere buona)

  2. ottenuto Furetto configurato tramite modelli?

È stato utile?

Soluzione

Questo è accaduto anche a me. È necessario disattivare furetto dal indicizzazione durante l'esecuzione del processo di ritardo.

Nella sua definizione lavoratore (qualcosa come RAILS_ROOT / lib / worker.rb), e dato un modello chiamato Post, si dovrebbe includere una linea come questa:

class Worker < Struct.new(:stuff)
  def perform
    Post.disable_ferret
    <do some stuff>
    .
    .
    .
  end
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top