升级Pyramid/SQLAlchemy网络应用
我有一个普通的Pylons Pyramid应用程序,它使用SQLAlchemy来管理数据库。
我已经设置了一个SQLAlchemy-migrate的仓库,并且它可以正常工作,但我希望能够使用paster来升级和降级数据库,或者至少让用户在安装完软件包后,能够升级或降级数据库到所需的版本。
现在我已经把这个功能集成到我的应用里了,所以每次启动应用时,它会自动进行版本升级。不过,我更希望用户能够明确地去升级数据库,这样他们就知道发生了什么,并且知道要提前备份。
我该怎么做呢?我如何才能在paster中添加命令?
用户设置应用程序的方式是:
paste make-config appname production.ini
paste setup-app production.ini#appname
第一次设置时,要进行数据库升级或者一般的升级,我想要:
paste upgrade-app production.ini#appname
或者类似这样的东西。
2 个回答
0
这可能不是你想要的,但我处理这个问题的一种方法是使用Fabric命令。在我的开源应用程序中,我有一个Fabric命令,你运行它会为你的应用创建一个.ini文件,然后在你调整里面的sqlalchemy.url之后,再运行一个Fabric命令来初始化SA迁移并执行升级。从那以后,要进行升级,你只需运行fab db_upgrade。
是我设置的安装文档的一个例子。
https://github.com/mitechie/Bookie/blob/master/fabfile/database.py
是通过Fabric接口提供的一组数据库特定命令。
1
你可以创建自己的粘贴命令,比如叫做 upgrade-app
,然后在任何地方都可以用 paster --plugin=appname upgrade-app /path/to/production.ini appname
来调用它。你可以看看 pyramid 是怎么实现 PShellCommand 的。