我正在为deploy on Heroku编写一个Python Flask应用程序。它将使用数据库。对于本地开发,我想使用Sqlite,但是当部署到Heroku时我想使用Postgresql。我怎样才能做到这一点?
我被卡住了,因为我不知道如何在我的盒子和Heroku服务器之间需要一套不同的包。
这是我在Gemfile
gem "pg", :group => :production
gem "sqlite3", :group => :development
然后Bundler将在开发和生产中安装适当的包。但我不知道Python's pip
的任何类似工作流程答案 0 :(得分:8)
嗯,你有两件事要解决。
首先,requirements.txt
并没有那么多问题。您可以将所有要求都放在同一个requirements.txt
文件中,同时安装两个数据库绑定都不会造成任何损害。但是,如果要分开,只需使用requirements.txt
进行部署,requirements-dev.txt
进行本地开发。
更重要的是数据库设置本身,为此你有一个单线解决方案:
app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get(
'DATABASE_URL', 'sqlite:////tmp/test.db')
由于DATABASE_URL
在Heroku上设置,但在本地没有设置(确保是这种情况),os.environ.get
将找不到它,因此恢复为默认值,即sqlite连接字符串。