python – 在heroku上运行flask-migrate会产生错误

我正在尝试使用flask-migrate在本地对我的数据库进行版本化,然后反映生产中的变化(Heroku).到目前为止,我成功地对本地数据库进行了版本升级并进行升级,所以现在我想在Heroku上反映这一点.为此,我将最新的代码状态与新创建的迁移文件夹和更新的requirements.txt一起推送到Heroku.我看到依赖项已成功安装:

Successfully installed Flask-Migrate alembic Flask-Script Mako

然后,我试过:

$heroku run python app/hello.py db upgrade

不幸的是我得到了回应:

Running `python app/hello.py db upgrade` attached to terminal... up, run.4322
Traceback (most recent call last):
  File "app/hello.py", line 37, in <module>
    manager.run()
  File "/app/.heroku/python/lib/python2.7/site-packages/flask_script/__init__.py", line 405, in run
    result = self.handle(sys.argv[0], sys.argv[1:])
  File "/app/.heroku/python/lib/python2.7/site-packages/flask_script/__init__.py", line 384, in handle
    return handle(app, *positional_args, **kwargs)
  File "/app/.heroku/python/lib/python2.7/site-packages/flask_script/commands.py", line 145, in handle
    return self.run(*args, **kwargs)
  File "/app/.heroku/python/lib/python2.7/site-packages/flask_migrate/__init__.py", line 97, in upgrade
    config = _get_config(directory)
  File "/app/.heroku/python/lib/python2.7/site-packages/flask_migrate/__init__.py", line 37, in _get_config
    config.set_main_option('script_location', directory)
  File "/app/.heroku/python/lib/python2.7/site-packages/alembic/config.py", line 142, in set_main_option
    self.file_config.set(self.config_ini_section, name, value)
  File "/app/.heroku/python/lib/python2.7/ConfigParser.py", line 753, in set
    ConfigParser.set(self, section, option, value)
  File "/app/.heroku/python/lib/python2.7/ConfigParser.py", line 396, in set
    raise NoSectionError(section)
ConfigParser.NoSectionError: No section: 'alembic'

我用谷歌搜索了这可能是什么,看起来配置文件无法打开,但我不知道可以做些什么来解决这个问题.为什么这在本地工作但不在Heroku?

解决方法:

我一直在努力奋斗,甚至发布在Heroku python论坛上,但到目前为止还没有回复.为了解决这个问题,我决定不在Heroku上远程运行迁移,而是在我的开发机器上运行迁移并传递生产数据库地址.所以我这样做:

>将开发数据库与生产同步(当使用Heroku时,您可以使用heroku pg轻松完成此操作:拉,您必须在调用此方法之前删除本地数据库)
>假设您的模型已经更新,请运行python app.py db migrate.重要提示:我也开始在我的本地获取原始错误,我发现我必须在我的app.py所在的完全相同的目录中,否则我收到错误.
>查看自动生成的迁移脚本
>使用python app.py db upgrade升级本地数据库
>更改应用程序的设置以使用生产数据库而不是本地开发数据库,​​然后再次运行python app.py db upgrade

经过一番思考后,我觉得这可能就是这个工具的设计方式.虽然能够从Heroku远程运行迁移仍然很好,但我会满足于我的解决方案,因为它更快并完成工作.

上一篇:如果我希望通过升级中的Session对象更改数据,如何测试alembic迁移?


下一篇:python – 在Google App Engine上运行Alembic迁移