我有一个应用程序设置,尝试使用.env文件配置它,使用python-dotenv加载它和Config类来获取变量 . 如果我设置了FLASK_APP,例如:export FLASK_APP = pg.py,并且运行瓶,应用程序运行,但配置不是't loaded. I know the environmental variables are being loaded from my .env file, and after lots of tinkering, I realized that the app is being created with no context (I think), but I'我不知道如何让它这样做 . 如果我将app.run()添加到pg.py的末尾,它可以工作,但我知道这不是我'm supposed to do. I'读过这个页面:http://flask.pocoo.org/docs/0.12/cli/几次,我可以't quite follow it to get what I'm之后 . 我尝试导出FLASK_CONFIG =开发作为我的最后一次尝试,看看它是否能正常工作,但事实并非如此 . 所以我的问题是,我如何使用烧瓶运行,让它正确运行我的应用程序,而不是运行'python pg.py'
编辑:我注意到一切正常,除了配置 . 不知道我错过了什么 . 我觉得,基于我've read, that FLASK_CONFIG=development should work. It'几乎就像使用'app = Flask( name )', skips the config loading, and goes to the Blueprint registration. Why? I know I can export all my sensitive information before running, and do it that way, but now I am stuck on trying to figure out a problem, and won'创建的应用程序一样,我能够让它继续下去,直到我明白:/
编辑2:实际上,正确创建了上下文并应用了配置 . 它只是不读取环境 . DEBUG = True不起作用,但其他配置可以 . 也许应用程序实例是在环境加载来自.env的变量之前创建的 . 我将把它留在这里,并在找到它时用解决方案更新 .
应用程序/ __ init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import config
db = SQLAlchemy()
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
db.init_app(app)
from app.main import main as main_blueprint
app.register_blueprint(main_blueprint)
return app
config.py
import os
class Config:
SECRET_KEY = os.environ.get('SECRET_KEY') or 'environment not set'
SQLALCHEMY_DATABASE_URI = os.environ.get('DB_URI')
@staticmethod
def init_app(app):
pass
class DevelopmentConfig(Config):
DEBUG = True
config = {
'development': DevelopmentConfig
}
pg.py
from app import db, create_app
from flask_migrate import Migrate
import os
from dotenv import find_dotenv, load_dotenv
dotenv_path = os.path.join(os.path.dirname(__file__), '.env')
if os.path.exists(dotenv_path):
load_dotenv(dotenv_path)
print("secret key:", os.environ.get('SECRET_KEY'))
else:
print('no env found')
app = create_app(os.getenv('FLASK_CONFIG'))
migrate = Migrate(app, db)
1 回答
在IRC #pocoo的一个善良的灵魂帮助我看到了光明 . 答案很简单 . 需要在导入create_app之前加载.env,create_app还会导入配置文件 .