我正在开发一个看起来类似于
的应用程序facebook/
__init__.py
feed/
__init__.py
business.py
views.py
models/
persistence.py
user.py
chat/
__init__.py
models.py
business.py
views.py
config/
dev.py
test.py
prod.py
我想要三个环境 Dev
、Test
和 Production
。
我有以下要求:
a.) 当我启动服务器 python runserver.py
时,我想提及我要连接哪个环境 - Dev
、Test
或生产
。
b.) Dev
& Production
应该构建了模式,只需要连接到机器
c.) 我还希望我的测试连接到 sqlite db
,并创建模式,运行测试
我怎样才能以配置方式实现这一点,这样我就不必对与数据库相关的任何内容进行硬编码。
flask有什么好的模式可用吗?
目前我的 runerver.py
对我不喜欢的环境进行了硬编码,
app = Flask(__name__)
app.config['SECRET_KEY'] = dev.SECRET_KEY
我正在寻找比我更好的想法
最佳答案
我使用的解决方案:
#__init__.py
app = Flask(__name__)
app.config.from_object('settings')
app.config.from_envvar('MYCOOLAPP_CONFIG',silent=True)
在应用程序加载的同一级别:
#settings.py
SERVER_NAME="dev.app.com"
DEBUG=True
SECRET_KEY='xxxxxxxxxx'
#settings_production.py
SERVER_NAME="app.com"
DEBUG=False
所以。
如果环境变量 MYCOOLAPP_CONFIG 不存在 -> 只有 settings.py 会加载,这是指默认设置(开发服务器对我来说)
这就是“silent=True”的原因,不需要第二个配置文件,而 settings.py 是开发的默认值,并且具有通用配置键的默认值
如果除了其中的第一个值之外还会加载任何其他 settings_file,它将覆盖原始值中的值。 (在我的示例中,DEBUG 和 SERVER_NAME 将被覆盖,而 SECRET_KEY 对所有服务器保持不变)
您唯一应该自己发现的事情取决于您启动应用程序的方式
在启动 ENVVAR 之前,应设置 MYCOOLAPP_CONFIG
例如,我使用主管守护进程运行,在生产服务器上,我只是将其放入主管配置文件中:
environment=MYCOOLAPP_CONFIG="/home/tigra/mycoolapp/settings_production.py"
通过这种方式,您可以轻松管理所有配置文件,此外,通过这种方式,您可以从 git 或任何其他版本控制实用程序中排除这些文件
启动前在控制台中的默认 Linux 方式是:
export MYCOOLAPP_CONFIG="/home/tigra/mycoolapp/settings_production.py"
关于python - Flask:如何管理不同环境的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15603240/