多年来没有使用过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"] %>
谢谢
答案 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。