2

我正在使用 capistrano 部署我的 rails 应用程序并使用瘦服务器。我在 ~/.bash_profile 中定义了 2 个用于我的邮件用户名和密码的环境变量export SMTP_USERNAME=...

当我 ssh 到服务器并尝试从 rails 控制台发送电子邮件时,它工作正常,但看起来它们在我运行cap deploy或任何其他命令时没有被瘦加载。

定义它们的正确方法是什么?我看过一些帖子,他们建议直接在config/environments/production.rb与代码本身相关的文件或其他文件中定义它们。出于安全原因,我试图避免这种情况。

更新:我尝试使用 yml 文件来存储它,但我遇到了这个问题:

email_config.rbconfig/initializers. 它的内容是:

EMAIL_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/email.yml")[RAILS_ENV]

config/email.yml我有:

production:
    username: username
    password: password

在我的config/environments/production.rb我有:

config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default :charset => "utf-8"
config.action_mailer.smtp_settings = {
  address: "smtp.gmail.com",
  port: 587,
  authentication: :plain,
  enable_starttls_auto: true,
  user_name: EMAIL_CONFIG[:username],
  password: EMAIL_CONFIG[:password]
}

现在的问题是初始化程序是在之后加载的environments.rb,如果我将变量的定义放在EMAIL_CONFIG我的电子邮件配置之前,那么RAILS_ROOT变量就没有定义。

4

1 回答 1

0

就像您说的那样,将密码直接保存在 production.rb 中并不是一个好主意。更好的选择是从 shell 变量(更接近您当前的设置)或 yaml 文件(我个人所做的)中引用它们。您可以在这篇文章中找到更多信息

于 2012-11-16T14:45:31.880 回答