में प्रत्येक कॉल के दौरान पेलोड कक्षाओं को फिर से लोड करने के लिए कैसे मैं देरी नौकरी कार्यकर्ता चला रहा हूं। जब भी मैंने foo
विधि का आह्वान किया, तो कार्यकर्ता hello
प्रिंट करता है।विलंबित कार्य: विकास मोड
class User
def foo
puts "Hello"
end
handle_asynchronously :foo
end
अगर मैं foo
विधि में कुछ परिवर्तन करने, मैं परिवर्तनों को प्रतिबिंबित करने के लिए कार्यकर्ता को पुनः आरंभ करने की है। विकास मोड में यह काफी थकाऊ हो सकता है।
मैं प्रत्येक अनुरोध के लिए पेलोड क्लास (इस मामले में उपयोगकर्ता कक्षा) को फिर से लोड करने का एक तरीका खोजने का प्रयास कर रहा हूं। मैंने पेलोड विधि आमंत्रण से पहले require_dependency
को आमंत्रित करने के लिए विलंबित जॉब लाइब्रेरी को पैच करने की कोशिश की बंदर की कोशिश की।
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
यह दृष्टिकोण require_dependency
जरूरतों का उपयोग कर पंजीकृत वर्ग के रूप में काम नहीं करता है मंगलाचरण से पहले पुनः लोड करना होगा और मैं पता लगा नहीं किया है यह कैसे करना है। मैंने प्रत्येक अनुरोध के लिए कक्षाओं को फिर से लोड करने के तरीके को जानने के लिए प्रेषक कोड पढ़ने में कुछ समय बिताया। मैं रीलोड कोड का पता लगाने में सक्षम नहीं था।
क्या किसी ने इससे पहले कोशिश की है? आप मुझे आगे बढ़ने की सलाह कैसे देंगे? या क्या आपके पास रेल क्लास रीलोड कोड का पता लगाने के लिए कोई पॉइंटर्स है?
धन्यवाद! यह बैकएंड के रूप में mongoid के साथ भी महान काम करता है। मुझे केवल काम करने के लिए पहली पंक्ति को हटाना पड़ा :) –
अच्छा! कुछ ऐसा ही किया गया है लेकिन एक [अलग लिपि] के रूप में (http://stackoverflow.com/questions/1609586/rails-delayed-job-want-to-load-newest-version-of-job-class/7861250#7861250) और इसे [फोरमैन] के साथ एक साथ उपयोग करें (http://blog.daviddollar.org/2011/05/06/introducing-foreman.html) –
मुझे वास्तव में समझ में नहीं आता * क्यों * लेकिन इससे मेरी रेल मेमोरी उड़ाती है सभी वातावरण (उत्पादन सहित) और गैर-डीजे उदाहरणों में। –