ब्लॉक करता है मेरे पास एक रेल ऐप है जिसमें मेरे पास एक ऐसा फ़ंक्शन है जो बहुत से ईमेल भेजता है। मैं इसे asynchronously
करना चाहता हूं और मैंने सोचा कि विधि deliver_later
ऐसा करेगी। वर्तमान में मुझे कुछ देरी है जब उपयोगकर्ता submit
पर क्लिक करता है जब तक फॉर्म सबमिट नहीं किया जाता है - जो खराब उपयोगकर्ता अनुभव की ओर जाता है (यह एक साधारण सरल रूप है)। मेरा कार्यान्वयन इस तरह दिखता है:रेल 4 - मेलर delivery_later जो मैं उम्मीद करता हूं वह नहीं कर रहा, यूआई
def create
respond_to do |format|
if @competition.save
[...]
send_notification_to_team_members
end
end
def send_notification_to_team_members
@team.members.each do |member|
unless member.user.eql?(current_user)
Mailer.deliver_new_competition_notification(member.user, @competition).deliver_later
end
end
end
वर्तमान में कार्रवाई समाप्त होने में ~ 4 सेकंड लगते हैं। मैंने यह भी कोशिश की है:
Mailer.deliver_new_competition_notification(member.user, @competition).deliver_later(wait: 1.minute)
फिर इसमें अधिक समय लगता है - मैं अनुमान लगाता हूं ~ 1 मिनट।
तो, क्या मैं deliver_later
गलत तरीके से उपयोग कर रहा हूं, या यह तरीका है जो मैं अपेक्षा करता हूं। उस स्थिति में, क्या कोई और तरीका है जिसका उपयोग मैं अपने प्रदर्शन को बेहतर बनाने के लिए कर सकता हूं?
आप किस सक्रिय बैकएंड का उपयोग कर रहे हैं? –
आपको ई-मेल को असीमित रूप से भेजना चाहिए। यदि आप 4.2 का उपयोग कर रहे हैं तो आप ActiveJob का उपयोग कर सकते हैं, या यदि आपको साइडकीक या बचाव के रूप में ऐसे समाधानों का उपयोग नहीं करना चाहिए। –
FYI: [यहां] (https: //blog.engineyard.com/2014/getting-started-with-active-job) ई-मेल भेजने के लिए ActiveJob का उपयोग करने के बारे में अच्छा लेख है। –