2011-07-10 13 views
16

Ho aggiunto la gemma delayed_job alla mia Gemfile e installato correttamente, ma quando provo a eseguire la seguente riga:costante inizializzata ritardato :: Lavoro

Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc 

ottengo l'errore 'costante inizializzata ritardato :: Lavoro '

Qualcuno può spiegare cosa devo fare qui? Ho provato a eseguire "rake jobs: work" in anticipo, ma restituisce anche l'errore "Delayed :: Job non inizializzato costante". Inoltre, ho aggiunto "require 'delayed_job'" al file (application.rb) senza molta fortuna.

risposta

12

Hai seguito le istruzioni di installazione nel file README? https://github.com/collectiveidea/delayed_job

Aggiungi questo al vostro Gemfile:

gem 'delayed_job_active_record' 

e quindi eseguire questo alla console:

$ rails generate delayed_job:active_record 
$ rake db:migrate 

È necessario creare la tabella di posti di lavoro in ritardo nel database (questo presuppone che sei utilizzando la registrazione attiva).

Per Rails 3, tutto ciò che devi fare è includerlo nel gemfile, eseguire il codice sopra per creare la tabella e migrare il database, quindi riavviare il server e andare!

+1

fare in modo che si aggiunge 'app/modelli/delayed_job.rb' pure anche. Non è necessario definire molto, solo la classe stessa: 'classe DelayedJob sorens

+0

@sorens puoi confermare che è un passaggio necessario? –

+0

@just__matt Credo di sì, ma non l'ho confermato. Inizia un nuovo progetto di rotaie, aggiungi la gemma delayed_job, salta il modello e vedi. – sorens

1

stavo lottando qualche tempo fa con lo stesso problema. Stavo seguendo ryan bates screencast su delayed_job e ho ottenuto lo stesso errore 'costante non inizializzata Delayed :: Job'. Nello screencast ryan crea un file chiamato mailing_job.rb (che si trova nella cartella lib) con il metodo delayed_job perform all'interno, che consente di utilizzare il metodo di accodamento. Dopo aver fatto qualche ricerca ho trovato che Rails 3 non carica automaticamente i file della cartella lib nella vostra app (non del tutto sicuro)

Prova questa
Nel vostro controller in cui si utilizza in questo modo:.

"Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc" 

Prova a richiedere il file in questo modo.

require 'mailing_job' 
class AssetsController < ApplicationController 
    def some_method 
     Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc 
    end 
end 
18

Se aggiornato alla versione delayed_job> = 3 è necessario aggiungere questo (presumendo che si stia utilizzando ActiveRecord):

# Gemfile 
gem 'delayed_job_active_record' 
+1

Molto utile - Ho avuto questo problema. Completare a parte ma per salvare qualcun altro che lo ha colpito ho anche dovuto aggiornare il mio utilizzo di Paperclip da 'gem 'aws-s3'' a' gem' aws-sdk'' –

+2

Vedere "Aggiornamento da 2.x a 3.0.0 su Active Record "qui: https://github.com/collectiveidea/delayed_job – Cam

+0

Questo ha risolto il mio problema spostandomi su uno stack di cedri su Heroku insieme al commento di Peter su aws. Grazie! – jbg

0

Possibilità di modifica della versione: se si passa dalla versione 2.1.x alla versione 3.x della gemma tramite un pacchetto non bloccato, è possibile che si verifichi un problema simile.

7

Sto utilizzando un lavoro in ritardo all'interno di un motore (quindi la gemma è specificata in un file .gemspec anziché in Gemfile) e si stava verificando lo stesso errore.Ho scoperto che ho potuto risolvere il problema utilizzando:

require 'delayed_job_active_record' # fixes problem 

piuttosto che

require 'delayed_job'    # doesn't 
+0

Questa risposta è già stata fatta due volte su questa domanda. –

+2

No non ha. Il punto chiave è che in un motore dovevo usare specificamente una dichiarazione di richiesta. Le altre risposte si riferiscono alle app standard di rails, dove l'utilizzo di "gem 'delayed_job_active_record'" nel Gemfile è stato sufficiente. Questo non è il caso di un motore in cui la gemma è definita in una gemspec, e quindi è necessario utilizzare una dichiarazione require dove la gemma è necessaria nel codice. – ReggieB

+0

Sì, questa dichiarazione richiede lo fa! Grazie. –

Problemi correlati