Ruby on rails 在Rails 4.1.0上使用ENV变量设置的config/secrets.yml变量时出现的问题

Ruby on rails 在Rails 4.1.0上使用ENV变量设置的config/secrets.yml变量时出现的问题,ruby-on-rails,railsapps,learn-ruby-on-rails,ruby-on-rails-4.1,Ruby On Rails,Railsapps,Learn Ruby On Rails,Ruby On Rails 4.1,很久没有玩过Rails了,所以浏览教程非常好 我对google身份验证有问题,示例代码从下面的app/models/contact.rb model update_电子表格方法调用config/secrets.yml变量(从shell中的ENV读取) def更新电子表格 connection=GoogleDrive.login(Rails.application.secrets.gmail\u用户名,Rails.application.secrets.gmail\u密码) 我通过我的~/.b

很久没有玩过Rails了,所以浏览教程非常好

我对google身份验证有问题,示例代码从下面的app/models/contact.rb model update_电子表格方法调用config/secrets.yml变量(从shell中的ENV读取)


def更新电子表格
connection=GoogleDrive.login(Rails.application.secrets.gmail\u用户名,Rails.application.secrets.gmail\u密码)

我通过我的~/.bash_配置文件设置了ENV变量,并确认使用以下代码我可以使事情正常进行,但这不是示例代码,所以我只是进行黑客攻击


def更新电子表格
connection=GoogleDrive.login(ENV[“GMAIL\u用户名”]、ENV[“GMAIL\u密码”])

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

在我的config/secrets.yml文件中,如下所示:


发展:
gmail_用户名:
gmail_密码:


谢谢

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

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

secrets.yml:

发展: 密钥库:3b7cd727ee24e8444053437c36cc66c3 SOMEKEY:SOMEKEY

以下是访问值的方式:


Rails.application.secrets.some_api_key返回SOMEKEY

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

My.yml文件包含如下内容:

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

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

有趣的问题。你的故障排除技能很好。你的代码应该没有问题。将凭据硬编码到config/secrets.yml中时会发生什么?(不要将其签入git。)谢谢,我将凭据硬编码到config/secrets.yml文件中,但它不起作用,因此我的应用程序似乎根本没有读取config/secrets.yml文件。接下来我应该看什么?我刚刚在本地克隆了一个包,安装并启动了服务器,收到了相同的错误,`Authentication failed for xxx:Response code 403 for post:error=BadAuthentication`在同一行:15 app/models/contact.rb看起来rails根本没有读取config/secrets.yml文件,我还尝试将凭据硬编码到克隆目录中的config/secrets.yml文件中。使用rails-v rails 4.1.0和ruby-v ruby 2.1.1p76(2014-02-24修订版45161)以防有人好奇。好吧,这很蹩脚,但我想出来了。看来我的gmail密码有问题!和@特殊字符,导致问题。传递shell ENV variables->config/secrets.yml->model->method
connection=GoogleDrive.login(Rails.application.secrets.gmail\u用户名,Rails.application.secrets.gmail\u密码)
我使用了调用方gems的更好的错误和绑定来查看是否可以调用gmail\u用户名,从我的模型中调用gmail_密码时,我将收到零。更改了密码,它工作了。似乎有比更改密码以排除!|@更好的方法。我能逃走吗?很高兴知道。你能编辑你的答案来展示例子吗?这可能对其他人有帮助。这应该是公认的答案。现在有一个问题:有没有办法缩短Rails.application.secrets.whatever,因为我会在很多地方调用它?
template = ERB.new File.new("path/to/config.yml.erb").read
processed = YAML.load template.result(binding)