2014-02-05 42 views
1

我正在配置我的應用程序通過gmail smtp發送電子郵件,所以我在production.rb文件中編寫action_mailer安裝程序。如何將SMTP配置放置在單獨的文件上?

雖然我不想讓我的gmail憑證寫在production.rb文件中,這是git版本化的。

這是我到目前爲止做出:

生產RB

require "SmtpData" 

    config.action_mailer.default_url_options = {:host => 'my server's ip'} 
    config.action_mailer.delivery_method = :smtp 
    config.action_mailer.smtp_settings = { 
    enable_starttls_auto: "true", 
    address: SmtpData::ADDRESS, 
    port: SmtpData::PORT, 
    domain: "pjforex.com", 
    authentication: :plain, 
    :user_name   => SmtpData::USER, 
    :password    => SmtpData::PASS 
    } 

然後,我創建config/initializers/smtp_data.rb包含:

class SmtpData 
    USER = '[email protected]' 
    PASS = 'password' 
    ADDRESS = "smtp.gmail.com" 
    PORT = "587" 
end 

但是當我Capistrano的嘗試預編譯的資產,我得到:

rake aborted! 
uninitialized constant SmtpData 

關於如何解決這個問題的任何線索。或更好的方法來解決這個問題?

感謝,

回答

1

您需要將配置存儲在從Git中排除但在部署之間共享的文件中。假設你正在使用Capistrano 3,它會是這樣的:

1)在你的服務器上創建一個文件shared/config/smtp.yml(使用YAML並不重要,但它只是更清潔的配置)在Capistrano根文件夾中具有以下內容:

user: [email protected] 
pass: your_password 
address: smtp.gmail.com 
port: 587 

2)這個文件添加到您linked_filesconfig/deploy.rb(理想情況下,config/database.yml應存放這種方式太):

set :linked_files, %w{config/database.yml config/smtp.yml} 

3)讀取SMTP配置在production.rbconfig/smtp.yml

4)您也可以在本地爲您的開發環境配置config/smtp.yml,但不要忘記將其添加到您的.gitignore

+0

有趣,我可以通過通常的提取名稱來引用文件嗎? –

+0

@dongiulio你的意思是從另一個Capistrano任務獲取鏈接文件的列表?當然,爲什麼不呢。或者是其他東西? – bredikhin

+0

我的意思是,我如何引用這些變量來將它們鏈接到正確的配置? –

0

我相信production.rbsmtp_data.rb之前爲什麼production.rb是無法訪問您所定義的類裝載,這就是生活。

我們使用一個解決方案來保持敏感憑據不在我們的git版本中,就是創建production.rb.template並將其添加到您的git存儲庫中。這個文件幾乎是你目前擁有的production.rb的副本,除了你將擁有佔位符,用於證書的去向。例如,

:username => USERNAME GOES HERE 

然後,我們從庫中刪除production.rb(和,可選地,將其設置爲通過GIT中被忽略)。當您簽出存儲庫的本地副本時,您將production.rb.template複製爲production.rb,然後填寫憑證信息。這隻會在你的本地部署中存在,不會被推送到git。

+0

你好,謝謝,但我不知道這將如何與Capistrano,從git存儲庫部署,並使用作爲production.rb無論是在回購。你怎麼處理那件事呢? –