2012-01-30 43 views
4

我需要一些關於在生產Ruby-on-Rails站點上配置郵件的建議。Rails&Devise:如何自動配置域名的郵件?

我部署在EngineYard的我的Rails應用程序。我有一對夫婦的網站,像demo.mydomain.comstaging.mydomain.com - 我該如何配置設計,使得在部署時我可以確保確認郵件來自demo.mydomain.comstaging.mydomain.com自動? ie,我想要相同的GitHub代碼庫,並且想要動態填充配置。

目前在config/environments/production.rb我也行:

config.action_mailer.default_url_options = { :host => 'demo.mydomain.com' } 

但是當同樣的代碼被部署到staging.mydomain.com因爲它們都運行在RAILS_ENV=production

任何想法,這是不正確的?

謝謝, 戴夫

更新:就目前來看,是可行的,我已經添加了特定的環境中硬編碼的郵件域。所以現在demo.mydomain.com運行在environments/demo.rb,並www.mydomain.comenvironments/productions.rb運行。我像這個是文件之間的重複,這不是很清楚,我怎麼幹起來,因爲我有,database.yml

回答

4

在你的色器件配置,通常config/initializers/devise.rb可以配置郵件發件人的設計。這個配置需要一個proc,所以可以在運行時評估一些東西。

Devise.setup do |config| 
    config.mailer_sender = Proc.new { your_magic_here } 
end 
+0

謝謝,我會對生產箱一玩,看看我能想出域 - 但據我所知,該域名是不是在運行框「可見」。在所有的應用程序都可以在幾個域上運行之後,所有這些都是在DNS級別上處理的。 – 2012-02-01 11:28:13

+0

正好。這就是爲什麼我們在每個請求中設置一個全局對象來保存域上的配置。這個對象然後在proc中被訪問。該物體與I18n寶石中所做的相似。 – phoet 2012-02-01 14:47:33

1

理想的情況下上演&生產服務器應該在不同的軌道環境中運行。不過,如果您希望生產環境運行在具有不同操作郵件程序url的生產服務器上,那麼它應該在部署級別完成。您可以隨時在部署時編寫環境文件。

+0

您可以更具體地瞭解我如何在部署時編寫環境文件?這是我錯過的訣竅。 – 2012-02-01 11:27:11

+0

好。將環境文件中的主機指定爲HOST_URL,並將您的部署配方grep文件指定爲HOST_URL,並將其替換爲您希望基於服務器(分段,生產)部署的url。 'config.action_mailer。default_url_options = {:host =>'HOST_URL'}' – 2012-02-01 11:36:29

+0

啊,我明白了。在這種情況下,我沒有明確的配方來配合('ey deploy'是我們的工作方式),但除此之外,這是我在其他框架中使用的策略。謝謝。 – 2012-02-01 15:43:09

0

首先,我想你應該分開你的應用程序的環境。查看此guide瞭解如何做到這一點。

然後,嘗試這樣的事情在你的色器件配置:

Devise.setup do |config| 
    if Rails.env.production? 
    config.mailer_sender = "[email protected]" 
    elsif Rails.env.staging? 
    config.mailer_sender = "[email protected]" 
    else 
    config.mailer_sender = "[email protected]" 
    end 
    ... 

檢查這個guide更瞭解PROC對象。

相關問題