如何在Heroku上需要不同的包到本地盒子?

时间:2012-11-27 23:05:08

标签: python heroku pip requirements.txt

我正在为deploy on Heroku编写一个Python Flask应用程序。它将使用数据库。对于本地开发,我想使用Sqlite,但是当部署到Heroku时我想使用Postgresql。我怎样才能做到这一点?

我被卡住了,因为我不知道如何在我的盒子和Heroku服务器之间需要一套不同的包。


这是我在Gemfile

中写的Ruby应用程序
gem "pg", :group => :production
gem "sqlite3", :group => :development

然后Bundler将在开发和生产中安装适当的包。但我不知道Python's pip

的任何类似工作流程

1 个答案:

答案 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连接字符串。