在Rails 4.1.0上使用ENV变量设置的config / secrets.yml变量的问题

时间:2014-04-12 21:19:32

标签: ruby-on-rails railsapps learn-ruby-on-rails ruby-on-rails-4.1

多年来没有使用过Rails,所以请完成Learn Ruby on Rails教程,这是非常好的。

我遇到谷歌身份验证问题,示例代码从app / models / contact.rb模型update_spreadsheet方法调用config / secrets.yml变量(从shell中的ENV读取)

def update_spreadsheet connection = GoogleDrive.login(Rails.application.secrets.gmail_username, Rails.application.secrets.gmail_password)

我通过我的〜/ .bash_profile设置了ENV变量并确认使用以下代码我可以使事情有效,但它不是示例代码所以我只是在黑客攻击。

def update_spreadsheet connection = GoogleDrive.login(ENV["GMAIL_USERNAME"], ENV["GMAIL_PASSWORD"])

我可以使它工作,但是,我想按照教程并知道如何更好地排除故障。如果有人有指针,将不胜感激。

在我的config / secrets.yml文件中看起来像:

development: gmail_username: <%= ENV["GMAIL_USERNAME"] %> gmail_password: <%= ENV["GMAIL_PASSWORD"] %>

谢谢

3 个答案:

答案 0 :(得分:3)

Rails读取secrets.yml但是从secrets.yml获取值与使用它的方式略有不同,请查看下面的代码:

secrets.yml:

发展:   secret_key_base:3b7cd727ee24e8444053437c36cc66c3   some_api_key:SOMEKEY

您可以通过以下方式访问该值:

Rails.application.secrets.some_api_key返回SOMEKEY

答案 1 :(得分:2)

我在这里遇到同样的问题并按照这里的所有说明进行操作,但仍然遇到了困难。我的gmail密码没有任何特殊字符,但在我的.bash配置文件中,我只是尝试在GMAIL_USERNAME和GMAIL_PASSWORD的双引号内容周围加上单引号,它终于有效了!

答案 2 :(得分:0)

上述解决方案对我不起作用。但是,我找到了如何在YAML文件中使用变量的解决方案?

我的.yml文件包含以下内容:

development:
gmail_username: <%= ENV["GMAIL_USERNAME"] %>
gmail_password: <%= ENV["GMAIL_PASSWORD"] %>

在.rb文件中,访问yml文件:

template = ERB.new File.new("path/to/config.yml.erb").read
processed = YAML.load template.result(binding)

因此,当您在.yml文件中引入scriptlet标记时,它更像是erb模板。因此,首先将其作为erb模板阅读,然后如上所示加载yml。