2014-02-05 36 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无论是在回购。你怎么处理那件事呢? –