Atualizando aplicativos da web Pyramid/SQLAlchemy
-
09-09-2020 - |
Pergunta
Eu tenho um aplicativo Pylons Pyramid padrão, que usa SQLAlchemy para persistência de banco de dados.
Eu configurei um repositório SQLAlchemy-migrate e o tenho funcionando, mas eu realmente quero ter a capacidade de usar o paster para atualizar e fazer downgrade do banco de dados, ou pelo menos alguma maneira de fazer com que o usuário (após instalar o ovo) atualize/downgrade o banco de dados para a versão necessária.
Eu o tenho integrado em meu aplicativo agora, então, na inicialização do aplicativo, ele faz a atualização da versão, mas prefiro ir com algo em que o usuário tenha que atualizar explicitamente o banco de dados para que saiba exatamente o que está acontecendo e saiba para fazer backups com antecedência.
Como eu faria isso?Como adiciono comandos para colar?
A forma como os usuários configurariam o aplicativo é:
paste make-config appname production.ini
paste setup-app production.ini#appname
Para configurá-lo pela primeira vez, para fazer a atualização do banco de dados ou atualização em geral eu gostaria:
paste upgrade-app production.ini#appname
Ou algo nesse sentido.
Solução
Você pode criar seu próprio comando paster, por exemplo. upgrade-app
, e, em seguida, ligue de qualquer lugar com paster --plugin=appname upgrade-app /path/to/production.ini appname
.Você pode consultar como a pirâmide implementa o PShellCommand.
Outras dicas
Não é bem o que você está procurando, mas uma maneira de lidar com isso é com Tecido comandos.Meu aplicativo OSS, tenho um comando fabric que você executa que cria um arquivo .ini para seu aplicativo e, depois de ajustar o sqlalchemy.url nele, você executa um comando fabric que inicia as migrações SA e executa a atualização.A partir de então, para atualizar você executa fab db_upgrade.
é um exemplo dos documentos de instalação que configurei.
https://github.com/mitechie/Bookie/blob/master/fabfile/database.py
O conjunto de comandos específicos do banco de dados está disponível por meio da interface do Fabric.