Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该如何在Heroku上运行alembic迁移?_Heroku_Sqlalchemy_Flask_Flask Sqlalchemy_Alembic - Fatal编程技术网

我应该如何在Heroku上运行alembic迁移?

我应该如何在Heroku上运行alembic迁移?,heroku,sqlalchemy,flask,flask-sqlalchemy,alembic,Heroku,Sqlalchemy,Flask,Flask Sqlalchemy,Alembic,我试图在Heroku上运行一个相当简单的Flask+SQLAlchemy站点,但我不确定应该如何运行迁移来设置数据库。当我运行heroku run alembic upgrade head时,出现以下错误: Running `alembic upgrade head` attached to terminal... up, run.1 Traceback (most recent call last): File "/app/.heroku/venv/bin/alembic", line 1

我试图在Heroku上运行一个相当简单的Flask+SQLAlchemy站点,但我不确定应该如何运行迁移来设置数据库。当我运行heroku run alembic upgrade head时,出现以下错误:

Running `alembic upgrade head` attached to terminal... up, run.1
Traceback (most recent call last):
  File "/app/.heroku/venv/bin/alembic", line 12, in <module>
    load_entry_point('alembic==0.4.0', 'console_scripts', 'alembic')()
  File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/config.py", line 255, in main
    CommandLine(prog=prog).main(argv=argv)
  File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/config.py", line 250, in main
    self.run_cmd(cfg, options)
  File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/config.py", line 241, in run_cmd
    **dict((k, getattr(options, k)) for k in kwarg)
  File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/command.py", line 124, in upgrade
    script.run_env()
  File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/script.py", line 191, in run_env
    util.load_python_file(self.dir, 'env.py')
  File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/util.py", line 185, in load_python_file
    module = imp.load_source(module_id, path, open(path, 'rb'))
  File "alembic/env.py", line 80, in <module>
    run_migrations_online()
  File "alembic/env.py", line 63, in run_migrations_online
    poolclass=pool.NullPool)
  File "/app/.heroku/venv/lib/python2.7/site-packages/sqlalchemy/engine/__init__.py", line 349, in engine_from_config
    return create_engine(url, **opts)
  File "/app/.heroku/venv/lib/python2.7/site-packages/sqlalchemy/engine/__init__.py", line 330, in create_engine
    return strategy.create(*args, **kwargs)
  File "/app/.heroku/venv/lib/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 64, in create
    dbapi = dialect_cls.dbapi(**dbapi_args)
  File "/app/.heroku/venv/lib/python2.7/site-packages/sqlalchemy/dialects/sqlite/pysqlite.py", line 289, in dbapi

其中,
app
是一个Flask实例。我正在使用Flask SQLAlchemy来减少我在应用程序中的DB使用,Flask Heroku来确保我的所有Flask配置变量都正确地从Heroku环境变量中提取。

结果表明Flask Heroku提取的是
数据库URL
的值,而我在Heroku上的应用程序不存在该值。相反,如果我手动将
HEROKU\u POSTGRESQL\u CRIMSON\u URL的值映射到
app.config['SQLALCHEMY\u DATABASE\u URI']
,它将按预期工作

更新:结果是我忘了升级我的数据库,所以那个应用程序有一个默认值,这就是为什么数据库URL不存在的原因。因此,真正的解决办法是:不要忘了宣传你的DB


更新2:让我总结一下:使用将适当的
SQLALCHEMY_数据库_URI
注入应用程序的配置,调整
env.py
使用应用程序配置的
SQLALCHEMY_数据库_URI
而不是
alembic.ini
中的URL,然后通过
Heroku运行alembic升级头在Heroku的服务器上运行alembic
(或任何您想要运行的迁移)。这将避免您必须调整ini文件以适应不同的环境(因为宿主环境将为您管理它).

我也认为我必须在heroku上手动运行
alembic upgrade head
,才能进行数据库更改,但事实并非如此。如果应用程序中有正确的
数据库URL
值,则alembic migrate将在部署时运行,无需再次运行

要确认,您可以连接到数据库heroku pg:psql--app
并进行检查。

您可以在
程序文件中指定一个。我的结果如下:

web: gunicorn ...
release: alembic upgrade head

这对我不起作用,你能帮我一下吗?我没有使用flask,但正在尝试运行一个部署。它对我不起作用,你能解释一下它对你的作用吗?@user1193371
web: gunicorn ...
release: alembic upgrade head