Rails控制台和Pow中的环境变量

时间:2012-05-10 04:06:55

标签: ruby-on-rails rack-pow

我无法在Rails控制台中访问env变量,而在他们工作的应用程序中。

.powenv我有export SENDGRID_PASSWORD="123"

config/initializers/mail.rb中有:

ActionMailer::Base.smtp_settings = {
  :password => ENV['SENDGRID_PASSWORD']
}

因此,当我键入UserMailer.welcome_mail.deliver时,在控制台中出现错误“ArgumentError:SMTP-AUTH已请求但缺少密码短语”。但是,从应用程序中它成功发送邮件。

如何在控制台中提供env变量?

3 个答案:

答案 0 :(得分:11)

. .powenv

然后

rails c

(dot是在当前环境下运行脚本的命令)

答案 1 :(得分:4)

您的Rails控制台无法访问环境变量,因为Pow会将从<{strong> .powenv.powrc文件传递到 Rails。 .. Rails不会自己读取这些文件。

换句话说,您在ENV['SENDGRID_PASSWORD']文件中设置.powenv变量,但在启动Rails控制台时未触及该文件。

您需要在应用程序控制器中设置一个before_filter来设置ENV['SENDGRID_PASSWORD'](或者在.powenv文件中提供另一种类似的阅读方式你的Rails应用程序中before_filter。)

答案 2 :(得分:2)

对于后代,你可以在environment.rb,development.rb或初始值设定项(config / initializers / pow.rb)中添加这样的内容,具体取决于你想要的加载顺序:

# Load pow environment variables into development and test environments
if File.exist?(".powenv")
  IO.foreach('.powenv') do |line|
    next if !line.include?('export') || line.blank?
    key, value = line.gsub('export','').split('=',2)
    ENV[key.strip] = value.delete('"\'').strip
  end
end