2012-06-09 23 views
21

मेरे छोटे ऐप पर नए साइन अप किए गए उपयोगकर्ताओं को साइट पर पहुंच प्राप्त करने से पहले व्यवस्थापक (मुझे) द्वारा अनुमोदित किया जाना चाहिए। मैं अपने उपयोगकर्ता मॉडल में after_create :send_admin_email के साथ विकास में ऐसे ईमेल उत्पन्न करने में सफल रहा हूं जो बहुत अच्छा काम करता है। मेरी समस्या यह है कि मैं अपने परीक्षणों (फैक्ट्रीगर्ल का उपयोग करके) के दौरान कई उपयोगकर्ताओं को उत्पन्न कर रहा हूं और प्रत्येक परीक्षण उपयोगकर्ता ने एक वास्तविक ईमेल भेज दिया है। मेरे परीक्षण चलाना जनवरी में गुड़ डालने जैसा है और मुझे अपने इनबॉक्स में भेजे गए सैकड़ों ईमेल हटाना होगा। मैं इसे कैसे बंद कर सकता हूं?एक्शनमेलर परीक्षण मोड में वास्तविक ईमेल भेज रहा है! - कैसे बंद करें?

Rails Guides में Action Mailer Basics मुझसे कहता है कि "डिफ़ॉल्ट रूप से कार्रवाई मेलर परीक्षण परिवेश में ईमेल भेजने नहीं है। वे सिर्फ ActionMailer :: Base.deliveries सरणी में जुड़ जाते हैं।"

इसके अलावा, config/environments/test.rb में मुझे मिल गया है:

config.action_mailer.delivery_method = :test 

यही होने config/environment.rb में के अलावा है:

# Configuration for using SendGrid on Heroku 
ActionMailer::Base.smtp_settings = { 
    :address  => 'smtp.sendgrid.net', 
    :port   => '587', 
    :authentication => :plain, 
    :user_name  => 'app[my app number]@heroku.com', 
    :password  => '[something super secret]', 
    :domain   => '[let's get this party started!.com]', 
    :enable_starttls_auto => true 
} 
ActionMailer::Base.delivery_method = :smtp 

मुझे यकीन है कि मैं कुछ सरल और बुनियादी याद कर रहा हूँ कर रहा हूँ। मैंने चारों ओर और संबंधित प्रश्नों की खोज की है और पोस्ट एक्शनमेलर वास्तव में ईमेल भेजने का परीक्षण करने के तरीके से निपटते हैं।

किसी भी विचार या सहायता के लिए अग्रिम में नम्र कृतज्ञता।

अनुपूरक: Is it possible to turn off ActionMailer emails when cucumber testing is happening on development? पर मिले समान प्रश्न के उत्तर के बाद मैं पागलपन भेजने वाले ईमेल को रोकने में सक्षम था। फिर भी, मुझे कई rspec फ़ाइलों में ActionMailer::Base.delivery_method = :test जोड़ना पड़ा। क्या मैं इसे वैश्विक रूप से बंद कर सकता हूं? किसी के पास क्या हो रहा है पर कोई विचार है?

+0

उन सभी ईमेल के साथ, मैंने अपने 200/दिन को भेजें ग्रिड द्वारा अनुमत किया। मैंने पाया है [वास्तव में Sendgrid का उपयोग नहीं करने वाली सुविधाओं को कैसे लिखें?] (Https://groups.google.com/group/heroku/browse_thread/thread/7a4044f299ccf1fc/a0d687041fd97389?pli=1) जो कहता है कि 'एक्शनमेलर :: Base.delivery_method =: smtp 'in' config/environment.rb' में 'config.action_mailer.delivery_method = ओवरराइडिंग है' कॉन्फ़िगरेशन/वातावरण/test.rb 'में' test' 'मैंने' एक्शनमेलर :: Base.delivery_method 'को स्थानांतरित कर दिया है =: smtp 'कॉन्फ़िगरेशन/वातावरण/development.rb' और' config/वातावरण/production.rb' में जो काम कर सकता है। कल अपडेट करें। उसके नोटोक के प्रेषक निर्देशों के बारे में उस नोट के लिए – BenU

उत्तर

34

तो मैंने इसे समझ लिया है। Config/environment.rb में ActionMailer::Base.delivery_method = :smtp को कॉन्फ़िगर/वातावरण/test.rb में ActionMailer::Base.delivery_method = :test ओवरराइड करता है।

तो, उस पंक्ति को हटाएं, ActionMailer::Base.delivery_method = :smtp' config/environment.rb से और इसे कॉन्फ़िगर/वातावरण/production.rb में रखें। जो आपको कॉन्फ़िगरेशन/वातावरण/test.rb में ActionMailer::Base.delivery_method = :test और कॉन्फ़िगरेशन/वातावरण/development.rb में इच्छित संस्करण में रखने की अनुमति देता है। मैंने विकास किया। आरबी :test क्योंकि मैंने फेकर का उपयोग करके अपना डेटाबेस पॉप्युलेट किया और इसे smtp में बदल दिया, इसलिए मुझे पूरा यकीन था कि असली ईमेल अतिरिक्त चेक के रूप में भेजे गए थे।

नोट: इन परिवर्तनों को प्रभावी होने के लिए आपको अपने सर्वर को पुनरारंभ करना होगा।

एक और टिप्पणी: Heroku's current SendGrid Instructions एक नया config/initializers/mail.rb फ़ाइल जो संभावना इसकी आखिरी पंक्ति को दूर करने और प्रत्येक config में वांछित संस्करण रखने की आवश्यकता होगी SendGrid Heroku विन्यास कोड डाल/वातावरण/[production.rb , development.rb, test.rb]

+1

+1, धन्यवाद! –

+0

ओवरराइड जानकारी के लिए धन्यवाद! यही वह था जो मुझे अपने सभी परीक्षणों को फिर से बनाने के लिए जानना था। –

12

शायद उपयोगी ...

मेरे config/environment.rb नहींActionMailer::Base.delivery_method = :smtp शामिल था और मेरे config/वातावरण/test.rb शामिल किया ActionMailer::Base.delivery_method = :test लेकिन रेल फिर भी परीक्षण करते समय वितरित मेलर्स।

मैंने बस कॉन्फ़िगर/वातावरण/परीक्षण में निम्न को जोड़ा।rb ठीक करने के लिए:

config.action_mailer.perform_deliveries = false 
0

मैं समान Rails4.2 में स्थिति (ActionMailer साथ ActiveJob एकीकरण) भले ही मैं किया सामना नहीं लिखने DELIVERY_METHOD =: config/environment.rb में smtp।

मेरे मामले में, यहां समस्या "पृष्ठभूमि" के रूप में "resque" का उपयोग करने के बाद हुई थी। अंत में, मुझे पता चला है कि निम्नलिखित config गलत था:

config/initializers/active_job.rb:

Rails.application.config.active_job.queue_adapter = :resque # here is WRONG 

... क्योंकि यह मोड का परीक्षण करने के रूप में अच्छी तरह से प्रभावित।

तो, मैंने केवल कॉन्फ़िगरेशन/वातावरण/{विकास, उत्पादन.आरबी} में "queue_adapter =: resque" सेट किया है। अब, यह काम करता है जैसा कि मैं उम्मीद करता हूं।