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

Is it possible to store a JSON file to an ENV variable with dotenv?

我在 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"
}

在我的控制器中调用

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

用这个配置没问题,我设法用了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"
}" 

然后在controller中这样调用

@session = GoogleDrive::Session.from_service_account_key(ENV['CLIENT_SECRET'])

或者这样

@session = GoogleDrive::Session.from_service_account_key(JSON.parse(ENV['CLIENT_SECRET']))

但这两种方法都不起作用。所以我的问题是:"Is it possible to store JSON file in an ENV variable ?"

是的。可以将 json 文件存储在变量中。 然而,需要做一个小改动:

\\"type\\": \\"service_account\\",

对 json 大括号内的每个双引号执行此操作。

将 JSON 对象转换为字符串并将其存储在 ENV

您可以使用 JSON.dump 将 JSON 对象转换为字符串

然后在你的控制器中JSON.parse(ENV['CLIENT_SECRET'])

或者

您可以在 initializers 文件夹中创建一个 google_session.rb

$google_session = GoogleDrive::Session.from_service_account_key(
   # config goes here
)

并且在您的控制器中,您将有权访问 $google_session 全局变量

我想出的解决方案是对 json 对象进行基本编码并存储它,然后根据使用它的请求对其进行解码。

您可以将项目放在一行中,例如:

VITE_FIREBASE={"apiKey":"slslsls","slsls":"lelsls"}

您只需确保您的 键中有引号

并像这样获取它们(SvelteKit 示例):

const p = process?.env ? process.env : import.meta.env;

const firebase_config = JSON.parse(p.VITE_FIREBASE);

J