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

Col*_*nic 1 python pip heroku requirements.txt

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

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


这是一个Ruby应用程序,我会写在我的 Gemfile

gem "pg", :group => :production
gem "sqlite3", :group => :development
Run Code Online (Sandbox Code Playgroud)

然后Bundler将在开发和生产中安装适当的包.但我不知道Python的pip有任何类似的工作流程

Yuv*_*dam 8

那么,你有两件事需要解决.

首先,requirements.txt这不是一个问题.您可以将所有需求都放在同一个requirements.txt文件中,安装两个数据库绑定都不会造成任何损害.但是,如果要分离,只需requirements.txt用于部署和requirements-dev.txt本地开发.

更重要的是DB设置本身,为此你有一个单线解决方案:

app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get(
    'DATABASE_URL', 'sqlite:////tmp/test.db')
Run Code Online (Sandbox Code Playgroud)

既然DATABASE_URL是在Heroku上设置,而不是在本地设置(确保是这种情况),os.environ.get则无法找到它,因此恢复为默认值,即sqlite连接字符串.