2012-12-20 14 views
7

मेरी रेल साइट के साथ, जब मैं जीमेल के माध्यम से मेल भेजने की कोशिश करता हूं, तो यह पूरी तरह से काम करता है। लेकिन जब मैं MandrillApp के माध्यम से भेजने का प्रयास करें, यह निम्न त्रुटि देता है (RController.create वह जगह है जहाँ देने आदेश में कहा जाता है):रेल मेलर नेट :: SMTPServerBusy

# ActionMailer Config 
config.action_mailer.default_url_options = { :host => 'localhost:3000' } 
config.action_mailer.delivery_method = :smtp 
config.action_mailer.default :charset => "utf-8" 

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

config.action_mailer.delivery_method = :smtp 
# config.action_mailer.smtp_settings = { 
# :address    => "smtp.gmail.com", 
# :port     => 587, 
# :domain    => 'gmail.com', 
# :user_name   => '[email protected]', 
# :password    => 'password', 
# :authentication  => 'plain', 
# :enable_starttls_auto => true } 

config.action_mailer.smtp_settings = { 
:address => "smtp.mandrillapp.com", 
:port  => 587, 
:user_name => ENV["EMAIL"], 
:password => ENV["PASSWORD"] 
} 
:

Net::SMTPServerBusy in RController#create 
454 4.7.1 <[email protected]>: Relay access denied 

यहाँ मेरी config/वातावरण/development.rb फ़ाइल है

जैसा कि यह ऊपर है, कोड काम नहीं करता है - मुझे ईमेल नहीं मिलता है और कोई त्रुटि पॉप अप नहीं होती है। अगर मैं इसे जीमेल से भेजने के लिए स्विच करता हूं, तो मुझे लगभग तुरंत ईमेल मिल जाता है। मैंने पहले कभी मंड्रिल के साथ काम नहीं किया है, इसलिए किसी भी मदद की सराहना की जाएगी।

उत्तर

5

मैन्ड्रिल से एक सेवा प्रतिनिधि से बात करने के लिए समाप्त हो गया, और यह पता चला कि मैं पर्यावरण चर के बजाय वास्तविक तारों का उपयोग कर रहा था, इसलिए मुझे बस कॉन्फ़िगरेशन फ़ाइल से "ENV" निकालना पड़ा।

मैं वापस जा रहा हूं और सुरक्षा के लिए पर्यावरण चर बना रहा हूं, लेकिन मैंने सोचा कि अगर मैं किसी और के पास एक ही समस्या है और यह सवाल पाता है तो मैं उसे वहां फेंक दूंगा।

+0

धन्यवाद यह मेरे लिए काम किया। आपको अपना जवाब स्वीकार करना चाहिए। मुझे 'एनएनवी' और '[]' 'EMAIL" जैसे छुटकारा पाना पड़ा। – LearningRoR

+0

क्या आप अपना समाधान स्पष्ट कर सकते हैं? मेरे पास वर्तमान में यह smtp_settings में यह पंक्ति है -: पासवर्ड => ENV ['MANDRILL_API_KEY']। आपके समाधान के मुताबिक, यह लाइन कैसे पढ़ी जानी चाहिए? – ajporterfield

+0

यदि आप पर्यावरण परिवर्तक की बजाय MANDRILL_API_KEY को प्रोग्राम वैरिएबल के रूप में परिभाषित कर रहे हैं, तो आपको केवल 'password => MANDRILL_API_KEY' की आवश्यकता है, 'पासवर्ड => ENV [' MANDRILL_API_KEY ']'। एक पर्यावरण चर अधिक सुरक्षित है, क्योंकि आपकी एपीआई कुंजी आपकी साइट के बजाय आपके कंप्यूटर/सर्वर पर संग्रहीत की जाएगी (मूल रूप से, कोई आपके कोड को पकड़ सकता है, और फिर भी आपकी कुंजी नहीं प्राप्त कर सकता है), लेकिन एक सामान्य चर कार्यान्वित करना आसान है - यह निर्भर करता है कि आप सुरक्षा के साथ कितने चिंतित हैं (हालांकि, ठीक है, आपको पर्यावरण चर करना चाहिए)। बहुत सारे शोध के बाद – camdroid

2

क्या आपने निम्नलिखित सेट अप Mandrill SMTP Integration पर देखने का प्रयास किया है। उम्मीद है कि यह

+0

सहायता के लिए धन्यवाद (मुझे प्रमाणीकरण लाइन याद आ रही थी), लेकिन यह त्रुटि से छुटकारा नहीं पाता है। जब मैं एक ईमेल भेजने का प्रयास करता हूं, तो मुझे अभी भी नेट :: SMTPServerBusy त्रुटि मिलती है। – camdroid

0

मुझे संदेह है कि आपकी समस्या फ़्यूज़न पैसेंजर (इसलिए उत्पादन में) के कारण होती है। यात्री पर्यावरण चर सेट करने के लिए कुख्यात है।

यह SO issue 2 समाधान सुझाता है: हार्डकोडिंग मान, या यात्री द्वारा उपयोग किए जाने वाले रूबी रैपर को ओवरराइड करना।

मैं एक तीसरा विकल्प सुझाता हूं: तैनाती के दौरान पर्यावरण चर का विस्तार करना। यह बहुत देर से हार्डकोडिंग में देरी है, लेकिन आपके पासवर्ड को आपके कोड से बाहर छोड़ देता है। Capistrano के लिए

desc "Replace environment variables with hardcoded values in config files" 
task :replace_env_vars, roles: :app do 
    run "mv #{release_path}/config/environments/production.rb #{release_path}/config/environments/production.before_sed.rb" 
    run 'env | sed \'s/[\%]/\\&/g;s/\([^=]*\)=\(.*\)/s%ENV\\\[\\\"\1\\\"\\\]%\\\"\2\\\"%/\' > ' + "#{release_path}/script/expand_env_vars.sed.script" 
    run "cat #{release_path}/config/environments/production.before_sed.rb | sed -f #{release_path}/script/expand_env_vars.sed.script > #{release_path}/config/environments/production.rb" 
end 

after "deploy:update_code", "deploy:replace_env_vars" 

फिर भी, आप:

आप सीधे अपने तैनाती के बाद पार्टी के इस बिट पर अमल करना चाहिए:

mv config/environments/production.rb config/environments/production.before_sed.rb 
env | sed 's/[\%]/\\&/g;s/\([^=]*\)=\(.*\)/s%ENV\\[\\"\1\\"\\]%\2%/' > script/expand_env_vars.sed.script 
cat config/environments/production.before_sed.rb | sed -f script/expand_env_vars.sed.script > config/environments/production.rb 

यहाँ बराबर Capistrano कार्य को तैनात है (आगे से बचने का बहुत कुछ!) एसएसएच सत्र में स्थापित वही पर्यावरण चर नहीं है जो इसे तैनात करने के लिए उपयोग करता है (यह .bashrc,/etc/profile निष्पादित नहीं करता है ...)। आप /etc/ssh/sshd_config में ~/.ssh/environment में उन्हें फिर से निर्यात और निम्नलिखित विकल्प संलग्न करने के लिए है:

PermitUserEnvironment yes 

ये आखिरी निर्देश there पाए गए। मैंने व्यक्तिगत रूप से मेरे new blog पर मेरी समस्या को थोड़ा और दस्तावेज किया है।

आशा इस मदद कर सकते हैं कुछ सुरक्षा मुद्दों को ठीक आप :) के

1

ENV चर पहली जगह में स्थापित कर रहे हैं, तो आप यह भी देख सकते हैं।

1

यदि आप हेरोकू का उपयोग कर रहे हैं, तो आपको सीएलआई में पर्यावरण चर सेट करने की आवश्यकता है।

सीडी आपकी कार्य निर्देशिका में और ...

heroku config:set MANDRILL_USERNAME='YOUR USERNAME' 
heroku config:set MANDRILL_APIKEY="YOUR API KEY" 

अब आप पर्यावरण चर का उपयोग कर सकते हैं। मुझे पता है कि आप विकास.आरबी के साथ काम कर रहे हैं, लेकिन जब आप उत्पादन प्राप्त करते हैं तो यह आपको सिरदर्द बचा सकता है। आरबी। मेरे application.yml फ़ाइल के साथ कुछ घंटों के लिए मुझे सिरदर्द का कारण बन गया।