2013-07-19 5 views
12

मैंने ईमेल भेजने और पृष्ठभूमि नौकरियों को संसाधित करने के लिए रेल 4 आवेदन में साइडकीक सेट किया है। मैंने यह भी तैयार किया है कि मैं devise_async और एक ठेठ संपर्क फ़ॉर्म ईमेलर का उपयोग कर रहा हूं। मैं ईमेल भेजने के लिए जीमेल का उपयोग कर रहा हूं।साइडकीक और रेल 4 एक्शनमेलर कभी भी ईमेल वितरित नहीं करता

अगर मैं साइडकीक को हटा देता हूं, तो यह सामान्य रूप से जीमेल (दोनों तैयार और संपर्क फ़ॉर्म) के माध्यम से ईमेल भेजता है, लेकिन जब मैं इसे सक्षम कर रहा हूं, तो यह काम नहीं करता है (न ही devise_async न तो संपर्क फ़ॉर्म)। साइडकीक दिखाता है कि पृष्ठभूमि की नौकरियां शुरू होती हैं और सफलतापूर्वक समाप्त होती हैं (मैं उन्हें उन साइनरा ऐप के माध्यम से भी देखता हूं जिन्हें संसाधित किया गया है) लेकिन ईमेल कभी वितरित नहीं किया गया था।

विकास में, कंसोल दिखाता है कि ईमेल भेजे गए (devise_async और संपर्क फ़ॉर्म से दोनों, क्योंकि उन्हें सफलतापूर्वक साइडकीक के साथ संसाधित किया जाता है)।

क्या मैं पहले से ही कोशिश की है की है:

  • मैं sidekiq की rails4 के लिए GitHub शाखा जोड़ दिया है (मैं भी गुरु की कोशिश की है)
  • मैं नवीनीकृत किया है और जांच redis संस्करण से अधिक 2.4 हो (यह 2.6.14 है)
  • मैं bundle exec sidekiq

लेकिन कुछ भी काम किया साथ sidekiq चल रहा हूँ। मैं ruby ​​2.0.0-p247 का उपयोग कर रहा हूँ।

मैंने इस ऐप में साइडकीक के साथ छवि प्रसंस्करण भी सेट किया है और विकास और उत्पादन दोनों में पूरी तरह से काम करता है।

मैं कुछ भी कल्पना नहीं कर रहा हूँ, लेकिन मैं पूरा करने के लिए कोड जोड़ने हूँ:

मेरे मेलर कोड:

def send_message 
    @message = Message.new(message_params) 
    if @message.save 
    ContactMailer.delay.contact_form(@message.id) 
    end 
end 

मेरे मेलर:

def contact_form(message_id) 
    message = Message.where(id: message_id).first 
    @email = message.email 
    @message = message.text 
    mail(to: "[email protected]", subject: "Message from contact form") 
    end 

और उत्पादन के लिए मेरी विन्यास (जो यह साइडकीक के बिना काम करता है):

config.action_mailer.delivery_method = :smtp 
    ActionMailer::Base.smtp_settings = { 
    :address    => "smtp.gmail.com", 
    :port     => 587, 
    :domain    => "gmail.com", 
    :authentication  => "plain", 
    :enable_starttls_auto => true, 
    :user_name   => "myusername", 
    :password    => "mypassword" 
    } 
    config.action_mailer.default_url_options = { :host => "mydomain.com" } 

और यहाँ एक ठेठ sidekiq कतार:

/home/john/.rvm/gems/[email protected]/bundler/gems/sidekiq-4ed6eba8aff1/lib/sidekiq/rails.rb:14: warning: toplevel constant Queue referenced by Sidekiq::Client::Queue 
    2013-07-19T09:47:56Z 20112 TID-1a5mkc INFO: Booting Sidekiq 2.5.2 with Redis at redis://localhost:6379/0 
    2013-07-19T09:47:56Z 20112 TID-1a5mkc INFO: Running in ruby 2.0.0p247 (2013-06-27 revision 41674) [i686-linux] 
    2013-07-19T09:47:56Z 20112 TID-1a5mkc INFO: See LICENSE and the LGPL-3.0 for licensing details. 
    2013-07-19T09:47:56Z 20112 TID-1a5mkc INFO: Starting processing, hit Ctrl-C to stop 
    2013-07-19T09:48:11Z 20112 TID-1u2z02 Devise::Async::Backend::Sidekiq JID-4a7e66a14deab112191e4b49 INFO: start 
    2013-07-19T09:48:12Z 20112 TID-1u2z02 Devise::Async::Backend::Sidekiq JID-4a7e66a14deab112191e4b49 INFO: done: 1.214 sec 
    2013-07-19T09:48:50Z 20112 TID-1u2z02 Devise::Async::Backend::Sidekiq JID-32191822b789f5b6896a5353 INFO: start 
2013-07-19T09:48:51Z 20112 TID-1u2z02 Devise::Async::Backend::Sidekiq JID-32191822b789f5b6896a5353 INFO: done: 0.143 sec 
2013-07-19T09:49:29Z 20112 TID-1u2z02 Sidekiq::Extensions::DelayedMailer JID-c1911e0c4b72295dc067d57f INFO: start 
2013-07-19T09:49:29Z 20112 TID-1u2z02 Sidekiq::Extensions::DelayedMailer JID-c1911e0c4b72295dc067d57f INFO: done: 0.152 sec 

मुझे लगता है कि यह ActionMailer और sidekiq से कोई लेना देना नहीं है, लेकिन मैं कैसे डिबग करने के लिए पता नहीं है, सब कुछ काम करने के लिए लगता है, लेकिन ईमेल कभी दिया ही नहीं।

+1

क्या लॉग फ़ाइलों में कुछ भी उपयोगी है? –

+0

केवल यह चेतावनी: me/ujohn/.rvm/gems/[email protected]/bundler/gems/sidekiq-4ed6eba8aff1/lib/sidekiq/rails.rb: 14: चेतावनी: साइडकीक द्वारा संदर्भित निरंतर कतार को निरस्त करना :: क्लाइंट :: कतार लेकिन साइडकीक की कतार ठीक काम करती है। एक्शनमेलर के साथ ईमेल की प्रसंस्करण टूट गई है। – JohnDel

+0

यह एक बग की तरह लगता है, जैसा कि आप सही चीजें कर रहे हैं। मैं इसे रेपो पर एक मुद्दा के रूप में उठाऊंगा। –

उत्तर

15

मुझे मिल गया, तो आप इस तरह sidekiq चलाने के लिए है:

RAILS_ENV=production bundle exec sidekiq -D 

उत्पादन में चलाने के लिए। यह वही मुद्दा है क्योंकि संपत्ति प्रीकंपाइल है।

+0

मुझे यह आदेश चलाने के बाद यह त्रुटि 'अवैध विकल्प: -D' मिला। 'RAILS_ENV = उत्पादन बंडल exec sidekiq -d' काम किया। – webster

2

मेरे सेटअप इस रूप में ही है:

  • रेल 4
  • रूबी 1.9।3
  • ActionMailer
  • sidekiq
  • devise_async

मेलर को चलाने के लिए मेरे कोड ठीक चलाता है और किसी भी त्रुटि के बिना बाहर निकलता है - लेकिन कुछ नहीं किया जाता है और कोई ईमेल भेजा है। मेरे मेलर से:

logger.debug "about to mail" 
logger.debug Rails.application.config.action_mailer.sendmail_settings.inspect 
mail(to: purchase.email, subject: 'Your key') 
logger.debug "mail done!" 

वह कोड साइडकीक नौकरी से बुलाया जाता है। मैं रेलवे में डीबग लाइनों से संदेशों को लॉग इन कर सकता हूं, यह पुष्टि कर रहा हूं कि कोड की इस पंक्ति को बुलाया जाता है। मैं sendmail_settings के मान भी देखता हूं, यह पुष्टि करता हूं कि सेटिंग develop.rb से हैं।

तो, बस गिगल्स के लिए, मैं सेटिंग्स इस के लिए development.rb में बदल दिया है:

config.action_mailer.sendmail_settings = { :location => '/bogus/doesnt/exist' } 
बेशक

इन परिवर्तनों मैं webroot शुद्ध और पूरी तरह से एप्लिकेशन को फिर से लोड में से हर एक के बाद, और मेरे सर्वर को पुनः आरंभ ।

अब मैं डीबग लाइन को फर्जी कॉन्फ़िगरेशन मान प्रिंट करता हूं, और फिर भी मेल (...) फ़ंक्शन किसी भी त्रुटि के बिना निष्पादित कर रहा है। यह इस

config.action_mailer.raise_delivery_errors = true 
config.action_mailer.perform_deliveries = true 

config में स्थापित किया जा रहा है (और डिबग लाइनों द्वारा स्थापित किया जा रहा के रूप में पुष्टि की जा रही) के बावजूद है। मेरे मेल टेम्पलेट्स प्रस्तुत किए जाते हैं और पूरी चीज काम करती है, लेकिन sendmail कमांड कभी निष्पादित नहीं होता है, या यहां तक ​​कि कोशिश भी नहीं की जाती है।

तो फिर मैं में स्रोत कोड को देखा/var/lib/दोनों मेल और ActionMailer के लिए जवाहरात

Action Mailer source

... और मैं देख रहा हूँ मेल (...) समारोह के साथ समाप्त होता है कि बस "एम" - तो यह मेल ऑब्जेक्ट देता है। मैं मेल (...) फ़ंक्शन में कहीं भी नहीं देख सका जहां मेल वास्तव में भेजा गया है।

मैंने एक्शनमेलर मणि में प्रेषण (...) फ़ंक्शन में डीबग लॉग लाइनें जोड़ दीं, और मुझे लगता है कि लॉग में। मैंने मेल मणि में smtp डिलीवरी फ़ंक्शन में डीबग जोड़ा, और इसे कभी नहीं बुलाया गया।

outmail = mail(to: purchase.email, subject: 'Your key') 
outmail.deliver 

अब, अपने मेल काम करता है:

तो मैं आप को "देने" लौटाए वस्तु इस प्रकार पर की कोशिश की। मुझे नहीं पता कि यहां क्या हो रहा है। अगर यह किसी और के लिए उपयोगी है तो मुझे आशा है कि इससे मदद मिलती है। मैंने इस पर देव समय का एक दिन बर्बाद कर दिया है, इसलिए मैं इसे "यह काम करता है" के रूप में लेने जा रहा हूं और इसे जांचता हूं।

+1

आपका ईमेल वितरित नहीं करता है क्योंकि इसमें कोई पता नहीं है। https: // GitHub।com/mperham/sidekiq/ब्लॉब/मास्टर/lib/sidekiq/एक्सटेंशन/action_mailer.rb # L20 –

1

असल में मुझे रेल 4 संस्करण का उपयोग करते समय भी एक ही समस्या है। मेरे ऊपर काम नहीं कर रहा समाधान। तो, मैंने साइडकीक मेलर मणि https://github.com/andersondias/sidekiq_mailer आज़माएं और इसे अच्छी तरह से काम करें!

संबंधित मुद्दे