我正在尝试使用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远程运行迁移仍然很好,但我会满足于我的解决方案,因为它更快并完成工作.