生产服务器无法识别由Figaro gem设置的环境变量

时间:2012-10-26 03:46:17

标签: ruby-on-rails

我在外部文件(config / application.yml)中设置了我的Sendgrid密码,我使用Figaro gem设置了该文件。这在我的本地计算机上工作正常,但在我的服务器上,我收到一个错误,没有设置密码:

ArgumentError (SMTP-AUTH requested but missing secret phrase)

当我将Sendgrid配置更改为纯文本密码时,它工作正常,所以我假设Rails没有识别环境变量。奇怪的是,当我进入rails console production并执行puts ENV["SENDGRID_PASSWORD"]时,它可以正常工作。

有什么想法吗?

这是我的Sendgrid配置:

config.action_mailer.smtp_settings = {
  :address              => "smtp.sendgrid.net",
  :port                 => 587,
  :user_name            => "chrislawrence",
  :password             => ENV['SENDGRID_PASSWORD'],
  :domain               => "lakecinema.net.au",
  :authentication       => :plain,
  :enable_starttls_auto => true
}

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,无法弄清楚为什么Rails认为我没有给它密码。结果我在一个文件中定义config.action_mailer.smtp_settings,然后在另一个文件中添加键值组合。问题是我使用的是merge而不是merge!,所以我的密码永远不会进入smtp_settings,而是变成临时哈希。

根据这段经历,我了解到你得到的错误信息是ActionMailer说“密码在哪里?”的方式。

所以我的猜测是你的问题与Environment variable in Rails console and Pow相反,其中环境变量在Rails服务器上工作但在Rails控制台中不工作。尝试执行:

$ echo "$SENDGRID_PASSWORD"

看看你得到了什么。我觉得Env变量没有设置,但它只是Rails控制台中的一个局部变量。

答案 1 :(得分:-1)

应该是:authentication => '纯'