【发布时间】:2023-03-12 04:04:01
【问题描述】:
我将Flask-Migrate 集成到我的项目中。当我使用开发模式 (FLASK_ENV='development') 时,我通常会调用 flask db migrate 将更改应用到 SQLite 数据库。但是,在测试模式下 (FLASK_ENV='testing') 我使用的是内存存储 (sqlite:///:memory:),调用db migrate 是没有意义的,因为它最终会抛出error。有没有办法在 Flask CLI 中创建“pre_execute”钩子来检查在执行命令之前使用了哪个 ENV?因此,例如,如果 FLASK_ENV 设置为 testing,则调用 flask db init 将导致命令执行中止。我已经尝试过这样的事情,但没有奏效:
@click.group(cls=FlaskGroup, create_app=create_app)
def cli():
'''
Main entry point.
'''
if app.config.ENV == ENV.TESTING:
print('Running in TESTING mode...Aborting!')
sys.exit(1)
问题:如何在某些FLASK_ENV 设置下中止执行cli 命令?
编辑:我正在从.env 文件加载FLASK_ENV 值。
【问题讨论】:
-
不确定这是否与问题有关,但您似乎使用了错误的命令。
init命令仅在创建项目时使用一次。当您需要记录对数据库的更改时,使用migrate命令。upgrade命令用于通过这些更改升级您的数据库。我认为你需要更好地解释你在做什么以及为什么,因为不清楚。 -
@Miguel 如果 Flask 应用程序将
FLASJ_ENV设置为testing,我正在尝试禁止执行 Flask-Migrate 命令。 -
我知道您正在尝试这样做,但为什么呢?当您不想执行命令时,不调用命令不是更容易吗?对你的问题仍然很困惑。
-
@Miguel 不执行命令不是问题,但我宁愿明确处理错误并显示解释命令执行失败原因的消息。如果开发人员只会看到堆栈跟踪消息,他会感到困惑并且不会立即了解错误原因。
-
还是一头雾水。现在您第一次提到堆栈跟踪。你有错误吗?你为什么不把它包括在你的问题中?似乎很重要。
标签: python flask flask-migrate flask-cli