2009-04-28 11 views
20

मैं एक काफी पारंपरिक भूल गए पासवर्ड ईमेल पर काम कर रहा हूं - मैं उपयोगकर्ता को एक पासवर्ड में एम्बेडेड एक पासवर्ड परिवर्तन टोकन ईमेल करना चाहता हूं जिसे वे अपना पासवर्ड बदलने के लिए क्लिक कर सकते हैं। मैं पारंपरिक एक्शनमेलर के माध्यम से ईमेल कर रहा हूं। बल्कि एक ईमेल से बेकार -मैं Rails ActionMailer के लिए होस्टनाम को कैसे कॉन्फ़िगर कर सकता हूं?

अगर मैं एक सामान्य LINK_TO टैग

<%= link_to "click here", :controller => foo, :action => 'bar', :token => token %> 

का उपयोग मैं एक रिश्तेदार लिंक मिलता है।

अगर मैं

:only_path => false में जोड़ने, तो यह त्रुटियों कह रहा default_url_options[:host] सेट करना होगा। एक्शनकंट्रोलर दस्तावेज़ों का अर्थ यह है कि आप अपने नियंत्रक में #default_url_options विधियों को ओवरराइड करके ऐसा करते हैं। निश्चित रूप से रेल को यह बताने के लिए कॉन्फ़िगरेशन विकल्प है कि होस्टनाम का अपना नाम कॉन्फ़िगरेशन फ़ाइल जोड़ने के बिना, इसे पार्स करना आदि क्यों है?

+0

+1 हल, यह इतना है अजीब ... एक्शन मेलर पर यह सेटिंग क्यों है? –

+3

ईमेल भेजते समय, कोई HTTP अनुरोध नहीं है ई इन मूल्यों से। –

उत्तर

36

default_url_optionsconfig.action_mailer से उपलब्ध है और अपने पर्यावरण के विन्यास फाइल में सेट किया जाना चाहिए कर सकते हैं।

उदाहरण के लिए, config/environments/production.rb में:

config.action_mailer.default_url_options = { 
    :host => 'www.yourdomain.com' 
} 

स्थानीय परीक्षण के लिए, संशोधित config/environments/development.rb: फिर

config.action_mailer.default_url_options = { 
    :host => '127.0.0.1', 
    :port => 3000 
} 

, यह मानते हुए कि आप एक नामित मार्ग forgot_password_login कहा जाता है, तो आप में लॉगिन लिंक यूआरएल उत्पन्न कर सकते हैं आपका मेलर इस तरह कुछ उपयोग कर रहा है:

forgot_password_login_url(:token => 'a7s8q15sk2...') 
+0

के मेलर भाग को याद किया है, आपके पास आपके डिफ़ॉल्ट_url_options हैश में "लटकाना" अल्पविराम नहीं है। मैं इसे संपादित कर दूंगा लेकिन यह एक 1 char संपादित है जो SO पर verboten है। – engineerDave

+0

मुझे लगता है कि मैं अपना दिमाग खो रहा हूं। यह मेरे लिए काम नहीं कर रहा है –

-2

तुम सिर्फ

<%="click here", :controller => foo, :action => 'bar', :token => token, :host=>request.host -%> 
+5

अनुरोध मेलर –

+0

के भीतर से उपलब्ध नहीं है। मैं इसे ईमेल पीढ़ी के मानकों में से एक के रूप में पास कर सकता हूं - लेकिन हमने अभी इस वेब को वेब फ्रंट-एंड के बजाय हमारे एप्लिकेशन सर्वर से भेजने के लिए स्थानांतरित करने का निर्णय लिया है। मुझे लगता है कि इसका मतलब है कि मुझे उस कस्टम कॉन्फ़िगरेशन फ़ाइल को बनाने की आवश्यकता है जिसमें उसमें फ्रंटेंड वेबसाइट का यूआरएल है। – edebill

+0

दोह, –

4

एक और विकल्प है, जैसा कि http://pivotallabs.com/how-i-leaned-to-stop-hating-and-love-action-mailer/

इस समाधान का लाभ है कि इसे किसी भी कॉन्फ़िगरेशन (परेशानी से कम) की आवश्यकता नहीं है, और जब तक आप नियंत्रकों के भीतर से ईमेल भेजते हैं तब तक ठीक काम करता है।

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

+0

यह एक अच्छी टिप है, हालांकि मुझे डर है कि मुझे स्थिर कॉन्फ़िगरेशन की आवश्यकता है। किसी कारण से, मैं एक और अधिक प्रसंस्करण में चल रहा हूं जिसे वेब हिट के बाहर होने की आवश्यकता है। – edebill

+0

वर्तमान लिंक। http://pivotallabs.com/how-i-leaned-to-stop-hating-and-love-action-mailer/ – Sudhir

26

शायद आप सेट करना चाहते हैं: प्रोटोकॉल => 'https' साथ ही, बीटीडब्ल्यू।

config.action_mailer.default_url_options = { 
    :host => "portal.example.com", 
    :protocol => 'https' 
} 
+0

: प्रोटोकॉल => 'https' सूचक के लिए धन्यवाद। 'portal.example.com' का उपयोग करके कम से कम डेविस मेलर्स के साथ काम नहीं करता है। परिणामी यूआरएल उप डोमेन के बावजूद 'https://example.com/' से शुरू होते हैं)। – Kevin

-1

स्थापना default_url_options सीधे रेल में हटा दिया गया है 3.1

उसे बनाने के लिए url_for सहायक का उपयोग करें:

<%= link_to "click here", url_for(:controller => foo, :action => 'bar', :token => token, :host => 'www.yourdomain.com') %> 
0

default_url_options सीधे रेल 3.1 में पदावनत किया गया है की स्थापना। इसके बजाय url_for का उपयोग करें।

डिफ़ॉल्ट मान (http), :protocol => 'https://' ओवरराइड करने के लिए पैरामीटर :protocol जोड़ें। यह यूआरएल "https: // से शुरू होगा ..."डिफ़ॉल्ट रूप से" http: // "

0

दिलचस्प बात यह है कि आपके जैसा ही मुद्दा था, लेकिन यूनिट परीक्षणों में (माइकल हार्टल के रेलस्टोरियल के बाद)। मेरे पास यह test.rb फ़ाइल में थी, लेकिन वह मदद नहीं की:

config.action_mailer.default_url_options = { host: 'example.com', protocol: 'http' } 

मैं भी test.rb को इस तरह एक और लाइन जोड़ दिया है, और आश्चर्यजनक रूप से यह दोनों सवाल-जवाब के लिए इस मुद्दे को

default_url_options = { host: 'example.com', protocol: 'http' } 
संबंधित मुद्दे

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