在 Heroku 上使用环境变量作为凭证
Using Environment Variables as Credentials on Heroku
我需要使“google-credentials.json”文件在 heroku 上工作它通过将本地路径放在我的笔记本电脑上在本地工作但在 heroku 中我不知道该怎么做.
我搜索了很多,我找到了这个解决方案
How to use Google API credentials json on Heroku?
但我无法让它工作也许解决方案是旧的或者我做错了解决方案是:
1 - Declare your env variables from in Heroku dashboard The
GOOGLE_CREDENTIALS variable is the content of service account
credential JSON file as is. The GOOGLE_APPLICATION_CREDENTIALS env
variable in the string "google-credentials.json"
2 - Once variables are declared, add the builpack from command line :
$ heroku buildpacks:add https://github.com/elishaterada/heroku-google-application-credentials-buildpack
3 - Make a push. Update a tiny thing and push.
这是我的变量和构建包:
这是错误日志:
2022-03-11T09:22:57.866153+00:00 app[worker.1]: Traceback (most recent call last):
2022-03-11T09:22:57.866234+00:00 app[worker.1]: File "/app/Professor_Bot.py", line 102, in <module>
2022-03-11T09:22:57.866678+00:00 app[worker.1]: cred_obj = firebase_admin.credentials.Certificate(os.environ['GOOGLE_APPLICATION_CREDENTIALS'])
2022-03-11T09:22:57.866696+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/firebase_admin/credentials.py", line 83, in __init__
2022-03-11T09:22:57.866909+00:00 app[worker.1]: with open(cert) as json_file:
2022-03-11T09:22:57.866987+00:00 app[worker.1]: FileNotFoundError: [Errno 2] No such file or directory: "'google-credentials.json'"
2022-03-11T09:22:58.491014+00:00 heroku[worker.1]: Process exited with status 1
2022-03-11T09:22:58.644442+00:00 heroku[worker.1]: State changed from up to crashed
这是python代码:
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
import json
import os
cred_obj = firebase_admin.credentials.Certificate(os.environ['GOOGLE_APPLICATION_CREDENTIALS'])
default_app = firebase_admin.initialize_app(cred_obj, {
'databaseURL': 'https://professorbot-325702-default-rtdb.firebaseio.com/'})
ref = db.reference("/")
ref.set({
'boxes':
{
'box001': {
'color': 'red',
'width': 1,
'height': 3,
'length': 2
},
'box002': {
'color': 'green',
'width': 1,
'height': 2,
'length': 3
},
'box003': {
'color': 'yellow',
'width': 3,
'height': 2,
'length': 1
}
}
})
我希望有人能帮助我,非常感谢
无需将整个凭证 json 文件粘贴到配置变量中,您可以将每个键值对手动放入这些配置变量中,然后在您的 python 程序中使用 os.environ.get(key, default)
访问它们.
例如。如果您有如下配置变量:name: abc
,os.environ.get(name, "Not Available")
将 return abc
如果名称键存在,否则“不可用”。
您可以做的另一件事是,制作 json 文件 public,使用 运行 部分中的 curl 命令将此文件手动下载到您的 Heroku 机器上,然后它将可在本地机器上使用,但我不推荐这种方式。配置变量很好。
感谢上帝,我终于解决了这个问题,而不是使用具有凭据文件名和 json 凭据脚本的环境变量,然后使用 Buildpack 生成本地路径你只需要创建新的 Json 文件 然后在里面写入凭据脚本 最后将新的 Json 文件名作为参数传递给 LoadCredentialsFile 函数 Like This:
firebase_credentials = {
"type": "",
"project_id": "",
"private_key_id": "",
"private_key": "-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----\n",
"client_email": "",
"client_id": "",
"auth_uri": "",
"token_uri": "",
"auth_provider_x509_cert_url": "",
"client_x509_cert_url": ""
}
with open("firebase_credentials.json", "w") as write_file:
json.dump(firebase_credentials, write_file)
cred_obj = firebase_admin.credentials.Certificate('firebase_credentials.json')
我需要使“google-credentials.json”文件在 heroku 上工作它通过将本地路径放在我的笔记本电脑上在本地工作但在 heroku 中我不知道该怎么做.
我搜索了很多,我找到了这个解决方案 How to use Google API credentials json on Heroku? 但我无法让它工作也许解决方案是旧的或者我做错了解决方案是:
1 - Declare your env variables from in Heroku dashboard The GOOGLE_CREDENTIALS variable is the content of service account credential JSON file as is. The GOOGLE_APPLICATION_CREDENTIALS env variable in the string "google-credentials.json"
2 - Once variables are declared, add the builpack from command line :
$ heroku buildpacks:add https://github.com/elishaterada/heroku-google-application-credentials-buildpack
3 - Make a push. Update a tiny thing and push.
这是我的变量和构建包:
这是错误日志:
2022-03-11T09:22:57.866153+00:00 app[worker.1]: Traceback (most recent call last):
2022-03-11T09:22:57.866234+00:00 app[worker.1]: File "/app/Professor_Bot.py", line 102, in <module>
2022-03-11T09:22:57.866678+00:00 app[worker.1]: cred_obj = firebase_admin.credentials.Certificate(os.environ['GOOGLE_APPLICATION_CREDENTIALS'])
2022-03-11T09:22:57.866696+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/firebase_admin/credentials.py", line 83, in __init__
2022-03-11T09:22:57.866909+00:00 app[worker.1]: with open(cert) as json_file:
2022-03-11T09:22:57.866987+00:00 app[worker.1]: FileNotFoundError: [Errno 2] No such file or directory: "'google-credentials.json'"
2022-03-11T09:22:58.491014+00:00 heroku[worker.1]: Process exited with status 1
2022-03-11T09:22:58.644442+00:00 heroku[worker.1]: State changed from up to crashed
这是python代码:
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
import json
import os
cred_obj = firebase_admin.credentials.Certificate(os.environ['GOOGLE_APPLICATION_CREDENTIALS'])
default_app = firebase_admin.initialize_app(cred_obj, {
'databaseURL': 'https://professorbot-325702-default-rtdb.firebaseio.com/'})
ref = db.reference("/")
ref.set({
'boxes':
{
'box001': {
'color': 'red',
'width': 1,
'height': 3,
'length': 2
},
'box002': {
'color': 'green',
'width': 1,
'height': 2,
'length': 3
},
'box003': {
'color': 'yellow',
'width': 3,
'height': 2,
'length': 1
}
}
})
我希望有人能帮助我,非常感谢
无需将整个凭证 json 文件粘贴到配置变量中,您可以将每个键值对手动放入这些配置变量中,然后在您的 python 程序中使用 os.environ.get(key, default)
访问它们.
例如。如果您有如下配置变量:name: abc
,os.environ.get(name, "Not Available")
将 return abc
如果名称键存在,否则“不可用”。
您可以做的另一件事是,制作 json 文件 public,使用 运行 部分中的 curl 命令将此文件手动下载到您的 Heroku 机器上,然后它将可在本地机器上使用,但我不推荐这种方式。配置变量很好。
感谢上帝,我终于解决了这个问题,而不是使用具有凭据文件名和 json 凭据脚本的环境变量,然后使用 Buildpack 生成本地路径你只需要创建新的 Json 文件 然后在里面写入凭据脚本 最后将新的 Json 文件名作为参数传递给 LoadCredentialsFile 函数 Like This:
firebase_credentials = {
"type": "",
"project_id": "",
"private_key_id": "",
"private_key": "-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----\n",
"client_email": "",
"client_id": "",
"auth_uri": "",
"token_uri": "",
"auth_provider_x509_cert_url": "",
"client_x509_cert_url": ""
}
with open("firebase_credentials.json", "w") as write_file:
json.dump(firebase_credentials, write_file)
cred_obj = firebase_admin.credentials.Certificate('firebase_credentials.json')