2

很久没有玩过 Rails 了,所以请浏览一下Learn Ruby on Rails教程,这非常棒。

我在使用 google 身份验证时遇到问题,示例代码从下面的 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"] %>

谢谢

4

3 回答 3

3

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

秘密.yml:

开发:secret_key_base:3b7cd727ee24e8444053437c36cc66c3 some_api_key:SOMEKEY

这是您可以访问该值的方式:

Rails.application.secrets.some_api_key 返回 SOMEKEY

于 2014-06-27T07:07:21.233 回答
2

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

于 2014-04-18T15:52:47.433 回答
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。

于 2014-09-16T07:02:12.927 回答