标签: ruby-dotenv

是否可以使用 dotenv 将 JSON 文件存储到 ENV 变量中?

我在 Rails 应用程序中使用 Google Drive API。API 工作正常。我有以下 client_secret.json 文件:

{
  "type": "service_account",
  "project_id": "gobirdie-landing-page",
  "private_key_id": "xxxxx",
  "private_key": "-----BEGIN PRIVATE KEY----- xxxxx -----END PRIVATE KEY-----\n",
  "client_email": "xxxxxxx@gobirdie-landing-page.iam.gserviceaccount.com",
  "client_id": "xxxxxxxxx",
  "auth_uri": "xxxxxx",
  "token_uri": "xxxxxxx": "xxxxxxxx": "xxxxxxxxx"
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中调用

@session = GoogleDrive::Session.from_service_account_key("client_secret.json")

Run Code Online (Sandbox Code Playgroud)

有了这个配置没问题,我设法使用 API。但是,我想将我的 JSON 存储在 .env 文件中,例如:

CLIENT_SECRET = "{
  "type": "service_account",
  "project_id": "gobirdie-landing-page",
  "private_key_id": "xxxxx",
  "private_key": "-----BEGIN PRIVATE KEY----- xxxxx -----END PRIVATE KEY-----\n",
  "client_email": "xxxxxxx@gobirdie-landing-page.iam.gserviceaccount.com",
  "client_id": "xxxxxxxxx",
  "auth_uri": "xxxxxx",
  "token_uri": "xxxxxxx": "xxxxxxxx": "xxxxxxxxx"
}" 
Run Code Online (Sandbox Code Playgroud)

并以这种方式在控制器中调用

@session = GoogleDrive::Session.from_service_account_key(ENV['CLIENT_SECRET'])
Run Code Online (Sandbox Code Playgroud)

或者以这种方式

@session = …
Run Code Online (Sandbox Code Playgroud)

json ruby-on-rails ruby-dotenv

17
推荐指数
2
解决办法
2万
查看次数

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

我使用dotenv gem在秘密文件中存储用于开发的环境变量。在我的计算机上升级 ruby​​ 和 rails 后,gem 不再提取变量。为了尝试找出原因,在尝试了一段时间不同的选项后,我最终创建了两个相同的应用程序,只有两个不同之处。ruby 和 rails 版本。一个应用程序能够提取环境变量,另一个返回 nil。有什么建议?

我的设置

工作应用程序有

ruby "2.5.0"
gem 'rails',        '~> 5.1.6'
Run Code Online (Sandbox Code Playgroud)

非工作应用程序有

ruby "2.6.5"
gem 'rails',        '~> 6.0.0'
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的

  • 我阅读了 gem 站点上的信息并尝试添加Dotenv::Railtie.load到我的config/application.rb文件中。
  • 另外,我尝试添加require: 'dotenv/rails-now'我的 Gemfile 以防它是因为另一个 gem 问题。
  • 我添加require 'dotenv/load'到需要变量的文件中。
  • 我添加'require dotenv/load'config/application.rb文件中的各个位置

我单独进行的每个更改都使用byebug在终端中检查变量是否已加载。每次变量仍然是nil.

有什么我想念的吗?有什么建议?还是我应该切换到另一个宝石?我听说figaro可能会做同样的事情,只是以前从未使用过。预先感谢您的帮助。

environment-variables ruby-on-rails-6 ruby-dotenv

5
推荐指数
1
解决办法
2977
查看次数

dotenv 是否会覆盖 docker compose 设置的 envvars?

我不熟悉 Docker 或 devops,但我有这些文件:

.env.生产

DO_NOT_SEND_EMAILS=false
Run Code Online (Sandbox Code Playgroud)

docker-compose.ci.yml

services:
  my-app:
    environment:
      - DO_NOT_SEND_EMAILS=true
Run Code Online (Sandbox Code Playgroud)
  • 这两个文件都包含更多内容,但这些是相关的行。
  • envvar最终会设置成什么?

ruby-on-rails docker ruby-dotenv

4
推荐指数
1
解决办法
7521
查看次数