是否可以使用 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
我在 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