Sto eseguendo un lavoro in ritardo. Quando invoco sempre il metodo foo
, l'operatore stampa hello
.Lavoro ritardato: come ricaricare le classi del payload durante ogni chiamata in modalità di sviluppo
class User
def foo
puts "Hello"
end
handle_asynchronously :foo
end
Se faccio alcune modifiche al metodo di foo
, devo riavviare il lavoratore per i cambiamenti per riflettere. Nella modalità di sviluppo questo può diventare piuttosto faticoso.
Sto cercando di trovare un modo per ricaricare la classe del payload (in questo caso la classe User) per ogni richiesta. Ho provato a eseguire il patching della libreria DelayedJob per richiamare require_dependency
prima del richiamo del metodo del payload.
module Delayed::Backend::Base
def payload_object_with_reload
if Rails.env.development? and @payload_object_with_reload.nil?
require_dependency(File.join(Rails.root, "app", "models", "user.rb"))
end
@payload_object_with_reload ||= payload_object_without_reload
end
alias_method_chain :payload_object, :reload
end
Questo approccio non funziona come le classi registrate usando require_dependency
necessario ricaricare prima che l'invocazione e non ho capito come farlo. Ho passato un po 'di tempo a leggere il codice del dispatcher per capire come Rails ricarica le classi per ogni richiesta. Non ero in grado di localizzare il codice di ricarica.
Qualcuno ha provato prima? Come mi consiglieresti di procedere? O hai qualche indicazione per localizzare il codice di ricarica della classe Rails?
grazie! questo funziona alla grande, anche con mongoid come backend. ho solo dovuto rimuovere la prima riga per farlo funzionare :) –
Bello! è stato creato qualcosa di simile ma come [script separato] (http://stackoverflow.com/questions/1609586/rails-delayed-job-want-to-load-newest-version-of-job-class/7861250#7861250) e usalo insieme a [caposquadra] (http://blog.daviddollar.org/2011/05/06/introducing-foreman.html) –
Non capisco veramente * perché * ma questo fa esplodere la memoria di Rails in tutti gli ambienti (inclusa la produzione) e le istanze non DJ. –