Python Heroku上的Flask Firebase应用程序未获得环境变量
我在制作使用Firebase运行的烧瓶应用程序时遇到问题。 看起来Firebase凭据api即使在打印环境变量之后也不接受它们 以下是应用程序代码:Python Heroku上的Flask Firebase应用程序未获得环境变量,python,firebase,heroku,flask,environment-variables,Python,Firebase,Heroku,Flask,Environment Variables,我在制作使用Firebase运行的烧瓶应用程序时遇到问题。 看起来Firebase凭据api即使在打印环境变量之后也不接受它们 以下是应用程序代码: #!/usr/bin/env python3 """ PixelCode PDF generation application""" from io import BytesIO from os import environ from flask import Flask, render
#!/usr/bin/env python3
""" PixelCode PDF generation application"""
from io import BytesIO
from os import environ
from flask import Flask, render_template_string, send_file, abort, jsonify
from flask_cors import CORS
from dotenv import load_dotenv
from weasyprint import HTML, CSS
import firebase_admin
from firebase_admin import firestore, credentials
load_dotenv()
APP = Flask(__name__)
CORS(APP)
ENV_KEYS = {
"type": "service_account",
"private_key_id": environ["FIREBASE_PRIVATE_KEY_ID"],
"private_key": environ["FIREBASE_PRIVATE_KEY"],
"client_email": environ["FIREBASE_CLIENT_EMAIL"],
"client_id": environ["FIREBASE_CLIENT_ID"],
"token_uri": environ["FIREBASE_TOKEN_URI"],
"project_id": environ["FIREBASE_PROJECT_ID"],
}
print("ENV KEYS:", ENV_KEYS)
CREDENTIALS = credentials.Certificate(ENV_KEYS)
firebase_admin.initialize_app(
CREDENTIALS, {'databaseURL': environ["FIREBASE_DATABASE_URL"]}
)
DB = firestore.client()
# Trimmed for brevity...
@APP.route('/', methods=["GET"])
def get_home():
return render_template_string("<h2>PixelCode GoDocu Services</h2>")
if __name__ == '__main__':
# This is used when running locally only. When deploying to Google App
# Engine, a webserver process such as Gunicorn will serve the app. This
# can be configured by adding an `entrypoint` to app.yaml.
# Flask's development server will automatically serve static files in
# the "static" directory. See:
# http://flask.pocoo.org/docs/1.0/quickstart/#static-files. Once deployed,
# App Engine itself will serve those files as configured in app.yaml.
APP.run(host='0.0.0.0', port=environ.get('PORT', 8080), debug=True)
#/usr/bin/env蟒蛇3
“”“像素代码PDF生成应用程序”“”
从io导入字节io
从操作系统导入环境
从flask导入flask,呈现模板字符串,发送文件,中止,jsonify
从LASKU cors进口cors
从dotenv导入加载\u dotenv
从weasyprint导入HTML、CSS
导入firebase_管理员
从firebase_管理员导入firestore,凭据
加载_dotenv()
APP=烧瓶(名称)
CORS(应用程序)
环境密钥={
“类型”:“服务账户”,
“私钥id”:环境[“FIREBASE私钥id”],
“私钥”:环境[“FIREBASE私钥”],
“客户电子邮件”:环境[“FIREBASE客户电子邮件”],
“客户id”:环境[“FIREBASE客户id”],
“token_uri”:环境[“FIREBASE_token_uri”],
“项目id”:环境[“FIREBASE项目id”],
}
打印(“环境密钥:”,环境密钥)
凭据=凭据。证书(环境密钥)
firebase_admin.initialize_应用程序(
凭据,{'databaseURL':环境[“FIREBASE_DATABASE_URL”]}
)
DB=firestore.client()
#为简洁起见。。。
@APP.route('/',methods=[“GET”])
def get_home():
返回渲染模板字符串(“像素代码GoDocu服务”)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
#这仅在本地运行时使用。部署到Google应用程序时
#引擎,一个Web服务器进程(如Gunicorn)将为应用程序提供服务。这
#可通过向app.yaml添加“入口点”进行配置。
#Flask的开发服务器将自动为中的静态文件提供服务
#“静态”目录。见:
# http://flask.pocoo.org/docs/1.0/quickstart/#static-档案。一旦部署,
#App Engine本身将按照App.yaml中的配置提供这些文件。
APP.run(host='0.0.0.0',port=environ.get('port',8080),debug=True)
在dev/local环境(我的pc)上,该应用程序使用.env文件运行良好。
我也在heroku上设置了环境变量
部署应用程序时,print语句会很好地打印所有环境变量。
之后,应用程序崩溃,出现以下错误:
2019-12-04T14:11:33.349817+00:00应用程序[web.1]:[2019-12-04 14:11:33+0000][11][错误]工作进程中出现异常
2019-12-04T14:11:33.349821+00:00应用程序[web.1]:回溯(最近一次通话):
2019-12-04T14:11:33.349824+00:00应用程序[web.1]:文件“/app/.heroku/python/lib/python3.7/site packages/firebase_admin/credentials.py”,第97行,在init
2019-12-04T14:11:33.349826+00:00应用程序[web.1]:json_数据,作用域=_作用域)
2019-12-04T14:11:33.349829+00:00应用程序[web.1]:文件“/app/.heroku/python/lib/python3.7/site packages/google/oauth2/service\u account.py”,第193行,在from\u service\u account\u info中
2019-12-04T14:11:33.349832+00:00应用程序[web.1]:信息,要求=['client\u email','token\u uri']
2019-12-04T14:11:33.349834+00:00应用程序[web.1]:文件“/app/.heroku/python/lib/python3.7/site packages/google/auth/_service_account_info.py”,第54行,from dict
2019-12-04T14:11:33.349836+00:00应用程序[web.1]:签名者=密码.RSASigner.来自服务帐户信息(数据)
2019-12-04T14:11:33.349838+00:00应用程序[web.1]:文件“/app/.heroku/python/lib/python3.7/site packages/google/auth/crypt/base.py”,第115行,在from\u service\u account\u info中
2019-12-04T14:11:33.349840+00:00应用程序[web.1]:info.get(_JSON_FILE_PRIVATE_KEY_ID))
2019-12-04T14:11:33.349842+00:00应用程序[web.1]:文件“/app/.heroku/python/lib/python3.7/site packages/google/auth/crypt/_python_rsa.py”,第174行,从字符串开始
2019-12-04T14:11:33.349844+00:00应用程序[web.1]:raise VALUE ERROR('无法检测到任何键')
2019-12-04T14:11:33.349847+00:00应用程序[web.1]:值错误:无法检测到任何键
2019-12-04T14:11:33.349849+00:00应用程序[网站1]:
2019-12-04T14:11:33.349851+00:00 app[web.1]:在处理上述异常时,发生了另一个异常:
2019-12-04T14:11:33.349858+00:00应用程序[web.1]:
2019-12-04T14:11:33.349860+00:00应用程序[web.1]:回溯(最近一次通话):
2019-12-04T14:11:33.349862+00:00应用程序[web.1]:文件“/app/.heroku/python/lib/python3.7/site packages/gunicorn/arbiter.py”,第583行,在spawn_worker中
2019-12-04T14:11:33.349864+00:00应用程序[web.1]:worker.init_进程()
2019-12-04T14:11:33.349866+00:00应用程序[web.1]:文件“/app/.heroku/python/lib/python3.7/site packages/gunicorn/workers/base.py”,第129行,在初始化过程中
2019-12-04T14:11:33.349868+00:00应用程序[web.1]:自加载
2019-12-04T14:11:33.349871+00:00应用程序[web.1]:文件“/app/.heroku/python/lib/python3.7/site packages/gunicorn/workers/base.py”,第138行,在load\u wsgi中
2019-12-04T14:11:33.349873+00:00应用程序[web.1]:self.wsgi=self.app.wsgi()
2019-12-04T14:11:33.349875+00:00应用程序[web.1]:文件“/app/.heroku/python/lib/python3.7/site packages/gunicorn/app/base.py”,wsgi第67行
2019-12-04T14:11:33.349877+00:00应用程序[web.1]:self.callable=self.load()
2019-12-04T14:11:33.349879+00:00应用程序[web.1]:文件“/app/.heroku/python/lib/python3.7/site packages/gunicorn/app/wsgiapp.py”,第52行,已加载
2019-12-04T14:11:33.349881+00:00应用程序[web.1]:返回自加载
2019-12-04T14:11:33.349883+00:00应用程序[web.1]:文件“/app/.heroku/python/lib/python3.7/site packages/gunicorn/app/wsgiapp.py”,第41行,在load_wsgiapp中
2019-12-04T14:11:33.349885+00:00应用程序[web.1]:返回util.import\u应用程序(self.app\u uri)
2019-12-04T14:11:33.349887+00:00应用程序[web.1]:文件“/app/.heroku/python/lib/python3.7/site packages/gunicorn/util.py”,第350行,在导入应用程序中
2019-12-04T14:11:33.349889+00:00应用程序[web.1]:导入(模块)
2019-12-04T14:11:33.349891+00:00应用程序[web.1]:文件“/app/app.py”,第30行,在
2019-12-04T14:11:33.349893+00:00应用程序[web.1]:凭证=凭证。证书(ENV)
ENV_KEYS = {
"type": "service_account",
"private_key_id": environ["FIREBASE_PRIVATE_KEY_ID"],
"private_key": environ["FIREBASE_PRIVATE_KEY"].replace("\\n", "\n"),
"client_email": environ["FIREBASE_CLIENT_EMAIL"],
"client_id": environ["FIREBASE_CLIENT_ID"],
"token_uri": environ["FIREBASE_TOKEN_URI"],
"project_id": environ["FIREBASE_PROJECT_ID"],
}