dotenv gem 在 Rails 6 或 Ruby 2.6.5 中无法获取变量

2024-01-06

我当时用的是多特恩宝石 https://github.com/bkeepers/dotenv将开发环境变量存储在机密文件中。在我的计算机上升级 ruby​​ 和 Rails 后,gem 不再提取变量。为了尝试找出原因,经过一段时间尝试不同的选项,我最终创建了两个相同的应用程序,只有两个区别。 ruby 和rails 版本。一个应用程序能够提取环境变量,另一个应用程序返回零。有什么建议么?

My Setup

工作应用程序有

ruby "2.5.0"
gem 'rails',        '~> 5.1.6'

非工作应用程序有

ruby "2.6.5"
gem 'rails',        '~> 6.0.0'

到目前为止我已经尝试过的

  • 我阅读了 gem 网站上的信息并尝试添加Dotenv::Railtie.load to my config/application.rb file.
  • 另外,我尝试添加require: 'dotenv/rails-now'在我的 Gemfile 中,以防这是因为另一个 gem 问题。
  • I added require 'dotenv/load'到需要变量的文件。
  • I added 'require dotenv/load'到我的各个地方config/application.rb file

我单独进行并使用的每个更改byebug https://github.com/deivid-rodriguez/byebug在终端中检查变量是否已加载。每次变量仍然是nil.

我缺少什么吗?有什么建议么?或者我应该换成另一个宝石?我听到了figaro https://github.com/laserlemon/figaro可能会做同样的事情,只是以前从未使用过。预先感谢您的帮助。


好的,我找到了让它发挥作用的方法。不确定我下面的解释是否能解释为什么 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 应用程序的一项功能,因此它可能不是一种解决方法,而是编写应用程序的正确方法。

快乐编码!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dotenv gem 在 Rails 6 或 Ruby 2.6.5 中无法获取变量 的相关文章

  • Rails 6 + Capistrano - 没有这样的 puma.sock 文件

    拜托 我有一个大问题10多个小时了 每当我使用 Capistrano 和 Puma 在 Rails 中运行应用程序部署并重新启动 nginx 时 当我尝试访问我的 Web 时 我会看到此错误 在此输入图像描述 https i stack i
  • 部署在aws上时如何使用环境变量

    我正在构建一个在本地利用环境变量的 Web 应用程序 我想将其投入生产 在线 我正在尝试了解如何在 AWS 上设置环境变量 这是一个 Node js 应用程序 我在 AWS 上使用 Elastic beanstalk 进行部署 我已经看过了
  • Kubernetes Pod 动态环境变量

    我需要能够将自定义环境变量分配给 Pod 的每个副本 一个变量应该是一些随机的 uuid 另一个唯一的数字 怎么可能实现呢 我更愿意继续使用带有副本的 部署 如果这不是开箱即用的 如何通过自定义复制控制器 控制器管理器来实现 有没有可用的钩
  • 如何检查 Node.js 中是否设置了环境变量?

    我想检查我的环境变量是否设置快递JS https www npmjs com package express服务器并根据是否设置执行不同的操作 我试过这个 if process env MYKEY undefined console log
  • 如何在 Windows 上为“flask run”设置环境变量?

    我刚刚开始学习 Flask 我一直停留在设置 Flask 环境变量上 我不知道如何设置环境变量 每当我使用flask run命令 我遇到以下错误 错误消息 无法找到 Flask 应用程序 您没有提供 FLASK APP 环境变量 并且在当前
  • 为 PyCharm 中的所有配置设置相同的环境变量

    我有一个与 Celery 和很多不同的工作人员一起的项目 如何避免每次将 PyCharm 中的环境变量复制粘贴到每个运行 调试配置 有什么方法可以在项目设置中设置它们吗 找到解决方案here https stackoverflow com
  • 我应该如何配置 log4net 以写入 Windows XP 和 7 上的 %LOCALAPPDATA%?

    我有一个内部应用程序 它使用 log4net 进行日志记录 我希望在以下位置生成日志 LOCALAPPDATA Vendor App application log 不幸的是 log4net 正在创建日志文件 APPDATA 反而 这不是一
  • 如何在 Eclipse .classpath 文件中使用环境变量?

    在 Windows 中 我有一个环境变量 EXTERNAL LIB ROOT 指向 C Program Files MyExternalLibRoot 在另一台计算机上 它可能指向 C ExternalLibs 在 ant build xm
  • AWS Lambda 不读取环境变量

    我正在编写一个 python 脚本来查询 Qualys API 中的漏洞元数据 我在 AWS 中将其作为 lambda 函数执行 我已经在控制台中设置了环境变量 但是当我执行函数时 出现以下错误 module initialization
  • nuxt如何访问javascript文件中的env

    我无法在 nuxt 2 15 之外访问我的环境变量 当我部署时我可以看到 nuxt context config在浏览器中有正确的变量 但在自定义js文件中我无法访问process env baseURL它返回未定义 nuxt config
  • 如何将 .bat 文件中的变量获取到 PowerShell 脚本中?

    我正在用 PowerShell 替换 bat 脚本的部分内容 批处理文件的配置是通过以下文件完成的set适当的环境变量 我正在寻找一种方法将这些变量值加载到 ps1脚本 无需修改 bat文件 因为它们也在其他地方使用 一个例子 bat看起来
  • Azure无法访问React Web应用程序中的env变量

    几年前我看到有一个类似的问题 但超链接答案已被微软关闭 我有一个使用 create react app 创建的 React 应用程序 它已经部署到heroku并加载一些环境变量来访问谷歌地图等 这一切对于heroku来说都工作得很好 我已经
  • 主管和环境变量

    我真的不知道如何让主管使用环境变量 下面是一个配置片段 program htNotificationService priority 2 autostart true autorestart true directory home ubun
  • 从 Windows Batch (cmd.exe) 中的文件读取环境变量

    我正在尝试从批处理文件中读取变量 以便稍后在批处理脚本 Java 启动器 中使用 理想情况下 我希望所有平台 Unix Windows 上的设置文件都具有相同的格式 并且也是有效的 Java 属性文件 也就是说 它应该看起来像这样 sett
  • 添加多个 Visual Studio 属性表 (.props) 的 %PATH%

    界定PATH在属性表中的本地项目中 我需要将其添加到LocalDebuggerEnvironment 当只有 1 个属性表定义时 此方法效果很好PATH 如果我有多个属性表 而我想使用PATH从每个属性表中 Visual Studio 只会
  • cygwin中刷新windows用户的环境变量

    我想在执行 setx VARNAME VARVALUE 特别是路径 后刷新 cygwins 环境 export VARNAME VARVALLUE 不是一个选项 因为如果导出的值是路径 类似于 UNIX 格式 我需要转换导出的值 但 VAR
  • 展开字符串中的环境变量

    是否有一些 java 实用程序 可以扩展 和 env 字符串中的变量 就像 bin MY PATH gt home john bin dev null 谢谢 基本上 您想要使用环境变量进行字符串插值并扩展主目录 我不知道执行后者的简单方法
  • aws eb deploy 不加载环境变量

    我正在通过 eb deploy 将 symfony 项目部署到 ec2 实例 aws linux 2 部署后迁移脚本运行良好 但当我尝试使用 ec2 user 运行 symfony 命令时 出现有关数据库凭据错误的错误 这是因为我推送了带有
  • 将 JSON 导出到环境变量

    如果我有这样的 JSON hello1 world1 testk testv 我想将每个键值对导出为环境变量 如何通过 shell 脚本来做到这一点 例如 当我在终端上写时 echo hello1 world1应该打印其他键值对吗 注意 上
  • GNU 屏幕:环境变量

    更新 问题与问题相关GNU Screen 程序员在 Readbuf 中引用的内容 https stackoverflow com questions 1318186 gnu screen programmer quotes in readb

随机推荐