【问题标题】:flask production and development mode烧瓶生产开发模式
【发布时间】:2017-12-10 14:22:32
【问题描述】:

我用flask开发了一个应用,想发布到生产环境,但是不知道生产环境和开发环境(数据库和代码)怎么分离,有没有文档可以帮助我或者代码. 我在 config.py 文件中指定了这两个环境,但我不知道如何处理。

class DevelopmentConfig(Config):
    """
    Development configurations
    """
    DEBUG = True
    SQLALCHEMY_ECHO = True
    ASSETS_DEBUG = True
    DATABASE = 'teamprojet_db'
    print('THIS APP IS IN DEBUG MODE. YOU SHOULD NOT SEE THIS IN PRODUCTION.')


class ProductionConfig(Config):
    """
    Production configurations
    """
    DEBUG = False
    DATABASE = 'teamprojet_prod_db'

【问题讨论】:

    标签: python flask config development-environment production-environment


    【解决方案1】:

    使用的一个约定是在启动应用程序之前指定环境变量。

    例如

    $ ENV=prod; python run.py
    

    在您的应用程序中,您检查该环境变量的值以确定要使用的配置。在你的情况下:

    run.py

    import os
    if os.environ['ENV'] == 'prod':
        config = ProductionConfig()
    else:
        config = DevelopmentConfig()
    

    另外值得注意的是声明

    print('THIS APP IS IN DEBUG MODE. YOU SHOULD NOT SEE THIS IN PRODUCTION.')
    

    无论您设置哪个 ENV 都会打印出来,因为解释器会在运行脚本的其余部分之前执行类定义中的所有代码。

    【讨论】:

    • 当然我在执行之前指定环境,但是我想要的是在dev中修改的时候。即使我重新启动服务器(就好像它是两个不同的目录一样),我也不希望产品触碰环境。
    【解决方案2】:

    添加到丹尼尔的答案:

    Flask has a page in its documentation that discusses this very issue.

    由于您已在类中指定配置,因此您将使用 app.config.from_object('configmodule.ProductionConfig') 加载配置

    【讨论】:

    • 答案是 3 岁,目前最好的选择是使用 FLASK_ENV 配置。链接在这里:flask.palletsprojects.com/en/1.1.x/config/…
    • @AdityaShaw 不完全是,它仍然在此处的文档中:flask.palletsprojects.com/en/2.0.x/config/… "best option" 是一种意见,但这仍然是一种有效的方法。
    • @jesse-h 不检查环境变量,你怎么知道要加载哪个配置? (我的第一条评论是错误的。我并不是说它是错误的/旧的。Daniel 的回答是执行正确的步骤以了解您处于哪种模式,imo。)
    猜你喜欢
    • 2012-08-22
    • 2022-01-14
    • 2017-12-21
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 2020-12-05
    • 2021-08-26
    • 1970-01-01
    相关资源
    最近更新 更多