我有一个flask应用程序,该应用程序根据生产与开发环境变量使用不同的数据库。我担心开发人员在运行其本地flask应用程序之前忘记设置FLASK_ENV = development,而突然间他们正在对生产数据库进行更新。
我想到的唯一简单的解决方案是限制生产数据库仅接受来自生产服务器IP的请求,这样,如果开发人员忘记设置环境变量,一切都会出错,但是我想知道是否有更好的解决方案对于这个问题。
首先,最好将对生产数据库的访问限制为仅受信任的IP。
您可以在Configuration Handling: Development/Production (Flask Docs)中阅读,可以有多个配置并使用继承。
class Config(object):
DATABASE_URI = 'sqlite:///:memory:'
class ProductionConfig(Config):
DATABASE_URI = 'mysql://user@localhost/foo'
class DevelopmentConfig(Config):
pass
您可以一直加载安全的默认配置。只有设置了生产环境变量,才会加载实际的数据库配置。
另一种解决方案是使用[[必须不是 git存储库一部分的instance folder (Flask Docs)。
实例文件夹被设计为不受版本控制,并且不受部署限制。
因此,在部署应用程序时,只需将生产配置添加到此实例文件夹,并且没人会在其本地计算机上拥有prod配置。
他们有一些示例,并且在上面我给您的链接中很好地解释了如何使用它。