【问题标题】:Make Flask use Postgres on Heroku让 Flask 在 Heroku 上使用 Postgres
【发布时间】:2015-10-19 10:12:25
【问题描述】:

我一直在关注 Miguel Ginberg 的 Flask 书,我正在考虑如何部署我的应用程序和使用 PostgresDB。

在我的本地生产配置中,我必须手动进入并运行 Role.insert_roles() 才能分配任何角色。

如何在 Heroku 中使用 postgres 执行此操作?实际上,您如何连接到 postgres 数据库?不清楚postgres在代码中的哪个位置使用环境变量:

https://github.com/miguelgrinberg/flasky/blob/master/config.py

我感觉我的应用程序只是在运行 sqlite,而这本书并不清楚如何切换。

解决方案: 如果你已经部署到heroku并且你没有改变环境变量:

  • DATABASE_URI 到 SQLALCHEMY_DATABASE_URI
  • FLASK_CONFIG = heroku
  • FLASKY_ADMIN = 您的电子邮件

然后在你的 shell 中运行:

heroku run python manage.py shell
db.create_all()
db.commit()
Role.insert_roles() 

那么您可能正在从 SQLite 数据库运行开发配置!

【问题讨论】:

  • 本教程使用Flask-SQLAlchemy。您必须更改 SQLALCHEMY_DATABASE_URI 以指向您的 Postgres 数据库。
  • 好的,数据库设置好后,你能在生产环境中运行python shell吗?除非您将角色写入数据库,否则基于您的电子邮件地址环境变量的管理员帐户未正确配置。 python manage.py shell 然后role.create_all()。你会如何在 heroku 中做到这一点?

标签: postgresql heroku flask flask-sqlalchemy


【解决方案1】:

如果你想手动连接,你可以直接使用http://initd.org/psycopg/ 库。 Flask-SQLAlchemy 在引擎盖下提供使用 psycopg,请参阅 here - 在您的示例中,继续使用 SQLAlchemy 可能更容易。更多信息here

【讨论】:

  • flask 教程为带有可用 Flask-SQL alchemy 对象的 shell 提供了一个命令行选项。需要在此 shell 中运行 Role.insert_roles(),以便每个 DB 将用户角色写入表。这本书没有解释如何在heroku中完成。
【解决方案2】:

我遇到了同样的问题并解决如下:
1. 配置数据库
$:heroku 插件:创建 heroku-postgresql bobby-dev
......
添加 database_url:
$:hero 配置 -s |grep HEROKU-PSOTGRESQL
(然后显示 HEROKU_POSTGRESQL_RED_URL=.....)
$:heroku pg:推广 HEROKU-POSTGRESQL-RED

  1. 安装这个扩展:psycopg2

3.更改 config.py:
配置 = {
.....
“默认”:ProductionConfig
}

【讨论】:

    猜你喜欢
    • 2019-06-12
    • 2013-05-18
    • 2021-02-25
    • 2015-06-08
    • 2021-04-29
    • 2015-03-20
    • 2019-06-19
    • 1970-01-01
    • 2012-09-08
    相关资源
    最近更新 更多