我在 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) 我使用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)
到目前为止我尝试过的
Dotenv::Railtie.load到我的config/application.rb文件中。require: 'dotenv/rails-now'我的 Gemfile 以防它是因为另一个 gem 问题。require 'dotenv/load'到需要变量的文件中。'require dotenv/load'到config/application.rb文件中的各个位置我单独进行的每个更改都使用byebug在终端中检查变量是否已加载。每次变量仍然是nil.
有什么我想念的吗?有什么建议?还是我应该切换到另一个宝石?我听说figaro可能会做同样的事情,只是以前从未使用过。预先感谢您的帮助。
我不熟悉 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)