好的,我找到了让它发挥作用的方法。不确定我下面的解释是否能解释为什么 gem dotenv 不适用于 Rails 6。但是,现在在最新版本的 Rails 中有更好的方法可以做到这一点。
参考
我之所以找到这个答案是因为 Romil Mehta 的这篇博文(Rails 6 增加了对多环境凭证的支持 https://blog.saeloun.com/2019/10/10/rails-6-adds-support-for-multi-environment-credentials.html)
背景
似乎从 Rails 5.2 开始,我们已经能够存储凭证而不是秘密。我不知道这一点,并继续使用上述宝石。
现在发生了什么
因此,在创建新的 RoR 应用程序时,config\credentials.yml.enc
文件是在 Rails 应用程序中创建的,并使用以下文件中的主密钥进行加密:config\master.key
文件。 (注意:您应该在第一次 git 提交或您可能使用的任何其他版本跟踪器之前隐藏此文件。)
有多种方法可以编辑加密文件以添加您自己的变量以进行开发。博客作者使用了这个 Rails 控制台行作为示例:EDITOR=vim rails credentials:edit
。我更喜欢“nano”作为我的编辑器,所以我将控制台行更改为:EDITOR=nano rails credentials:edit
.
新方式
从纳米壳中,credentials.yml.enc
文件已解密,我可以读取它。然后,我添加了存储在秘密文件中的凭据,我试图在整个应用程序中访问该凭据。像这样的事情:
oauth:
server_base_url: http://localhost:3000
oauth_token: 123
oauth_secret: 456
之前,在我的应用程序中,我只需调用即可引用其中一个密钥ENV['variable_name']
as in ENV['server_base_url']
or ENV['oauth_token']
我会得到'的输出http://本地主机:3000 http://localhost:3000' 或 '123' 分别。现在,要做同样的事情,我需要代码:Rails.application.credentials.section_name[:variable_name]
,其中“section_name”是上面列表中的“oauth”,后跟三个变量名称。因此,要引用“oauth_token”,我会这样做:Rails.application.credentials.oauth[:oauth_token]
.
一旦我改变了我的所有ENV
致电Rails.application.credentials
代码,我的应用程序工作了。它提取了秘密变量(现在是“凭据”),并使我的示例应用程序连接到 oauth 服务器以授权登录。
Summary
同样,我不确定这如何解释为什么 gem 'dotenv' 在我的新 Ruby 和 Rails 环境中不起作用。但是,如果其他人也遇到同样的问题,这里有一个解决方法!由于它是 RoR 应用程序的一项功能,因此它可能不是一种解决方法,而是编写应用程序的正确方法。
快乐编码!