Flask 使用不同的数据库进行开发与生产

Flask 使用不同的数据库进行开发与生产,flask,development-environment,production,Flask,Development Environment,Production,我有一个flask应用程序,它根据生产和开发环境变量使用不同的数据库。我担心一个开发人员在运行本地FLASK应用程序之前忘记设置FLASK_ENV=development,突然他们对生产数据库进行了更新 我想到的唯一简单的解决方案是限制生产数据库只接受来自生产服务器IP的请求,这样,如果开发人员忘记设置环境变量,一切都会出错,但我想知道是否有更好的解决方案解决这个问题。首先,将对生产数据库的访问权限限制为仅受信任的IP是一种很好的做法 正如您在中所读到的,您可以拥有多个配置并使用继承 clas

我有一个flask应用程序,它根据生产和开发环境变量使用不同的数据库。我担心一个开发人员在运行本地FLASK应用程序之前忘记设置FLASK_ENV=development,突然他们对生产数据库进行了更新


我想到的唯一简单的解决方案是限制生产数据库只接受来自生产服务器IP的请求,这样,如果开发人员忘记设置环境变量,一切都会出错,但我想知道是否有更好的解决方案解决这个问题。

首先,将对生产数据库的访问权限限制为仅受信任的IP是一种很好的做法


正如您在中所读到的,您可以拥有多个配置并使用继承

class Config(object):
    DATABASE_URI = 'sqlite:///:memory:'

class ProductionConfig(Config):
    DATABASE_URI = 'mysql://user@localhost/foo'

class DevelopmentConfig(Config):
    pass
您可以随时加载安全的默认配置。仅当设置了生产环境变量时,才会加载实际的数据库配置

另一个解决方案是使用不能成为git存储库的一部分

实例文件夹设计为不受版本控制且特定于部署

因此,在部署应用程序时,只需将生产配置添加到此实例文件夹,就不会有人在其本地计算机上拥有prod配置。
他们提供了一些示例,并在我上面给您的链接中很好地解释了如何使用它。

首先,将对生产数据库的访问限制为仅受信任的IP是一种很好的做法


正如您在中所读到的,您可以拥有多个配置并使用继承

class Config(object):
    DATABASE_URI = 'sqlite:///:memory:'

class ProductionConfig(Config):
    DATABASE_URI = 'mysql://user@localhost/foo'

class DevelopmentConfig(Config):
    pass
您可以随时加载安全的默认配置。仅当设置了生产环境变量时,才会加载实际的数据库配置

另一个解决方案是使用不能成为git存储库的一部分

实例文件夹设计为不受版本控制且特定于部署

因此,在部署应用程序时,只需将生产配置添加到此实例文件夹,就不会有人在其本地计算机上拥有prod配置。
他们有几个例子,并在我上面给你的链接中很好地解释了如何使用它。

你可以在
中预写环境变量。flaskenv

FLASK_ENV=development
pip install python-dotenv
然后安装
python dotenv

FLASK_ENV=development
pip install python-dotenv

现在,如果您使用
flask run
在本地运行应用程序,flask将自动读取
.flaskenv
,并在其中设置环境变量。

您可以在
.flaskenv
中预写环境变量:

FLASK_ENV=development
pip install python-dotenv
然后安装
python dotenv

FLASK_ENV=development
pip install python-dotenv
现在,如果使用
flask run
在本地运行应用程序,flask将自动读取
.flaskenv
,并在其中设置环境变量