postgresql - Heroku 上的 Alembic/Flask-migrate 迁移运行但不创建表

标签 postgresql heroku flask alembic flask-migrate

我正在尝试将 Flask 应用程序部署到 Heroku。我已推送到 Heroku 并可以访问我的登录页面,但对数据库的任何调用都会出现 OperationalError:

2014-01-29T12:12:31.801772+00:00 app[web.1]: OperationalError: (OperationalError) no such table: projects_project u'SELECT

使用 Flask-migrate 我可以成功运行本地迁移和升级:

INFO  [alembic.migration] Context impl PostgresqlImpl.
INFO  [alembic.migration] Will assume transactional DDL.
INFO  [alembic.migration] Running upgrade None -> 4b56d58e1d4c, empty message

当我尝试使用 heroku run python manage.py db upgrade 在 Heroku 上升级时,升级似乎发生了,但是 Context impl.现在是 SQLite 吗?:

(dev01)Toms-MacBook-Pro:dev01 kt$ heroku run python manage.py db upgrade
Running `python manage.py db upgrade` attached to terminal... up, run.9069 
INFO  [alembic.migration] Context impl SQLiteImpl.
INFO  [alembic.migration] Will assume non-transactional DDL.
INFO  [alembic.migration] Running upgrade None -> 4b56d58e1d4c, empty message

运行 Heroku pg:info 得到:

=== HEROKU_POSTGRESQL_PINK_URL (DATABASE_URL)
Plan:        Dev
Status:      available
Connections: 0
PG Version:  9.3.2
Created:     2014-01-27 18:55 UTC
Data Size:   6.4 MB
Tables:      0
Rows:        0/10000 (In compliance)
Fork/Follow: Unsupported
Rollback:    Unsupported

Heroku升级的相关日志为:

2014-01-29T12:55:40.112436+00:00 heroku[api]: Starting process with command `python manage.py db upgrade` by kt@gmail.com
2014-01-29T12:55:44.638957+00:00 heroku[run.9069]: Awaiting client
2014-01-29T12:55:44.667692+00:00 heroku[run.9069]: Starting process with command `python manage.py db upgrade`
2014-01-29T12:55:44.836337+00:00 heroku[run.9069]: State changed from starting to up
2014-01-29T12:55:46.643857+00:00 heroku[run.9069]: Process exited with status 0
2014-01-29T12:55:46.656134+00:00 heroku[run.9069]: State changed from up to complete

另外,heroku config 给我:

(dev01)Toms-MacBook-Pro:dev01 kt$ heroku config
=== myapp Config Vars
DATABASE_URL:               postgres://xxx.compute-1.amazonaws.com:5432/da0jtkatk6057v
HEROKU_POSTGRESQL_PINK_URL: postgres://xxx.compute-1.amazonaws.com:5432/da0jtkatk6057v

where [xxx == xxx]

上下文实现如何。放?除了本地工作和 heroku 之间的明显区别之外,我无法弄清楚发生了什么或应该如何调试。谢谢。

最佳答案

数据库的 URL 取自 Flask 应用程序实例中的 SQLALCHEMY_DATABASE_URI 配置。这发生在 migrations 文件夹中创建的 Alembic env.py 配置中。

在将控制权移交给 Flask-Migrate 和 Alembic 之前,您是否在配置中存储了 os.environ['DATABASE_URL'] 的值?看起来你有一个默认的基于 SQLite 的数据库,它永远不会被 Heroku 提供的真实数据库覆盖。

关于postgresql - Heroku 上的 Alembic/Flask-migrate 迁移运行但不创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21432553/

相关文章:

python - 如何在 Flask 中的 session 结束时运行函数?

sql - 在 PostgreSQL 中从 jsonb 获取特定对象时出错

postgresql - 带有遗留数据库的 grails 2.2.5 中的复合键和映射

ruby-on-rails - 无法将应用程序推送到 heroku... env : bundle: No such file or directory

java - 部署到 Heroku 时无法找到并加载主类 HomeController?

javascript - 在 Flask 中使用 make_response 将两个变量传递给 javascript

postgresql - PostgreSQL 8.4 中的 <@ 运算符是什么?

sql - POSTGRESQL 中同一行的两个结果

grails - grails heroku插件-无法解析类grails.plugin.cloudsupport.AbstractCloudTagLib

api - flask 重写网址