2009-04-28 21 views
20

Oldukça geleneksel bir şifre şifresi e-postası üzerinde çalışıyorum - Kullanıcıya, parolalarını değiştirmek için tıklayabilecekleri bir bağlantıya gömülmüş bir parola değiştirme jetonu e-postası göndermek istiyorum. Geleneksel ActionMailer ile e-posta gönderiyorum. Bir e-postadan ziyade yararsız - Ben normal link_to etiketiRails ActionMailer için ana makine adını nasıl yapılandırabilirim?

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

kullanırsanız

Bir göreli bağlantısını alın.

Ben o zaman hataları ben default_url_options[:host] ayarlamanız gerekir söyleyerek

:only_path => false ekleseydik. ActionController belgeleri, denetleyicinizde #default_url_options yöntemlerini geçersiz kılarak bunu yaptığınızı gösterir. Elbette Rails'e, hostname'in kendi config dosyasımı eklemeden, ayrıştırmadan, vs. ayrıldığını söylemek için bir konfigürasyon seçeneği var.

+0

+1 çözüldü, bu böyledir garip ... neden eylem mailler bu ayarı nedir? –

+3

Bir e-posta gönderirken, o zaman hiçbir HTTP isteği yoktur e bu değerler. –

cevap

36

default_url_optionsconfig.action_mailer edinilebilir ve ortamın yapılandırma dosyasında ayarlanmalıdır yapabilir. Örneğin

, config/environments/production.rb halinde; yerel testi için

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

, config/environments/development.rb değiştirin:

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

Sonra adlandırılmış rota forgot_password_login denilen olduğunu varsayarak, içeri giriş bağlantı URL oluşturabilir mailer bu gibi bir şey kullanarak:

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

'un mailer bölümünü kaçırdınız. Ben onu düzenlerdim ama SO üzerinde verboten olan bir 1 char düzenleme. – engineerDave

+0

Aklımı kaybetmek gibi hissediyorum. Bu benim için çalışmıyor –

-2

sadece

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

isteği, satıcıya ait değildir. –

+0

Tam olarak. Bunu, e-posta nesnesinin parametrelerinden biri olarak iletebilirdim. Ancak, bu belirli e-postayı Web ön uç yerine Uygulama Sunucumuzdan gönderilmek üzere taşımaya karar verdik. Bence bu, önyüz web sitesinin URL'sine sahip olan özel yapılandırma dosyasını yapmam gerektiği anlamına geliyor. – edebill

+0

doh, default_url_options karma değerinizde "asılı" bir virgül bulunmadığından, –

4

http://pivotallabs.com/how-i-leaned-to-stop-hating-and-love-action-mailer/

'da açıklandığı gibi başka bir alternatif de vardır. Bu çözüm, herhangi bir yapılandırma gerektirmemesi (daha az bir güçlük) ve denetleyicilerin içinden e-posta gönderdiğiniz sürece iyi çalışır. Bir denetleyiciden (örneğin, komut satırından veya başka bir e-postaya yanıt olarak) geçmeden e-posta göndermeyi planlıyorsanız, ancak statik yapılandırmaya gereksiniminiz vardır.

+0

Bu iyi bir ipucu, korkarım gerçi statik konfigürasyona ihtiyacım var. Bir sebepten dolayı, bir web isminin dışında gerçekleşmesi gereken daha fazla işleme girmeye devam ediyorum. – edebill

+0

mevcut link. http://pivotallabs.com/how-i-leaned-to-stop-hating-and-love-action-mailer/ – Sudhir

26

Büyük olasılıkla şunu ayarlamak istersiniz: protocol => 'https' de, btw.

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

için teşekkürler: protocol => 'https' işaretçisi. 'portal.example.com' kullanıldığında, en azından Devise postalayıcıları ile düzgün çalışmıyor gibi görünüyor. Ortaya çıkan URL'ler, alt alan adına bakılmaksızın 'https://example.com/' ile başlar. – Kevin

-1

Ayar default_url_options doğrudan 3.1

onu oluşturmak için url_for yardımcı kullanın Raylar önerilmiyor:

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

doğrudan Raylar 3.1 önerilmiyor default_url_options ayarlanıyor. Bunun yerine url_for kullanın.

Varsayılan değeri (http), :protocol => 'https://' geçersiz kılmak için parametre :protocol'u ekleyin. Bu, "https: // ... ile başlayan URL’yi oluşturacak ..."varsayılan yerine" http: // "

0

İlginç bir şekilde, yaptığınız gibi aynı sorunu yaşadım, ancak birim testlerinde (Michael Hartl'ın demiryolu eğitimini takip ederken) .Bu test.rb dosyasında bu satırı kullandım, ancak yardım etmedi:

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

Ben de test.rb için böyle başka bir çizgi ekledik ve şaşırtıcı bu soru-cevap ikisi için konuyu

default_url_options = { host: 'example.com', protocol: 'http' } 
İlgili konular