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

允我心安 提交于 2021-01-21 04:36:07

问题


I am using Google Drive API with my Rails application. The API is working fine. I have the following client_secret.json file:

{
  "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"
}

which is called in my controller

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

With this configuration no problem, I manage to use the API. However, I would like to store my JSON in the .env file like:

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

And call it in the controller in this way

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

Or in this way

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

But neither methods are working. So my question is : "Is it possible to store JSON file in an ENV variable ?"


回答1:


Convert the JSON object to string and store it in the ENV

You can use JSON.dump to convert JSON object to string

and then in your controller JSON.parse(ENV['CLIENT_SECRET'])

Alternatively

you can create a google_session.rb inside initializers folder

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

and in your controller you will have access to $google_session global variable




回答2:


Yes. It is possible to store json file in variable. However there is one small change needed :

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

Do this for every double quote inside the curly braces of json.



来源:https://stackoverflow.com/questions/56277661/is-it-possible-to-store-a-json-file-to-an-env-variable-with-dotenv

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!