运行 带有 gunicorn 和环境变量的烧瓶应用程序
Running flask app with gunicorn and environment variables
对于本地开发,我只是设置了包含必要变量的 .env 文件,并且 运行 应用程序具有:
Flask run
一切似乎都很好,所有环境变量都在应用程序中正确读取和设置。
但是当我 运行 带有 gunicorn 的应用程序时:
gunicorn api:app --bind 127.0.0.1:5050
我可以清楚地看到没有加载env变量。
仅当我在 gunicorn 命令中明确设置它们时:
gunicorn api:app --bind 127.0.0.1:5057 -e POSTGRES_DB=postgresql://XXXXX
然后就可以了。
但是,因为我可以有很多环境变量,所以这不太可行。有没有办法使用文件来设置它?
Gunicorn 可以读取 gunicorn.conf.py
文件,这只是一个普通的 python 文件,您可以在其中设置环境变量:
# gunicorn.conf.py
import os
os.environ['POSTGRES_DB'] = "postgresql://XXXXX"
您甚至可以告诉它加载您的 .env
文件,例如:
# gunicorn.conf.py
import os
from dotenv import load_dotenv
for env_file in ('.env', '.flaskenv'):
env = os.path.join(os.getcwd(), env_file)
if os.path.exists(env):
load_dotenv(env)
对于本地开发,我只是设置了包含必要变量的 .env 文件,并且 运行 应用程序具有:
Flask run
一切似乎都很好,所有环境变量都在应用程序中正确读取和设置。
但是当我 运行 带有 gunicorn 的应用程序时:
gunicorn api:app --bind 127.0.0.1:5050
我可以清楚地看到没有加载env变量。
仅当我在 gunicorn 命令中明确设置它们时:
gunicorn api:app --bind 127.0.0.1:5057 -e POSTGRES_DB=postgresql://XXXXX
然后就可以了。 但是,因为我可以有很多环境变量,所以这不太可行。有没有办法使用文件来设置它?
Gunicorn 可以读取 gunicorn.conf.py
文件,这只是一个普通的 python 文件,您可以在其中设置环境变量:
# gunicorn.conf.py
import os
os.environ['POSTGRES_DB'] = "postgresql://XXXXX"
您甚至可以告诉它加载您的 .env
文件,例如:
# gunicorn.conf.py
import os
from dotenv import load_dotenv
for env_file in ('.env', '.flaskenv'):
env = os.path.join(os.getcwd(), env_file)
if os.path.exists(env):
load_dotenv(env)