【问题标题】:How to require different packages on Heroku to local box?如何将 Heroku 上的不同软件包要求到本地盒子?
【发布时间】:2012-11-15 16:47:00
【问题描述】:

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

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


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

gem "pg", :group => :production
gem "sqlite3", :group => :development

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

【问题讨论】:

标签: python heroku pip requirements.txt


【解决方案1】:

嗯,你有两件事要解决。

首先,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 连接字符串。

【讨论】:

  • 我处于同样的情况,除了我想在本地运行 Postgres。什么是 Postgres 连接字符串?谢谢。
  • postgres://localhost/dbname?
  • 是的,我想通了——我只是因为某种原因不正确地安装了 Postgres——所以我必须重新安装才能让它工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 2016-01-18
  • 2011-07-31
相关资源
最近更新 更多