1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/ihatemoney_ynh.git synced 2024-09-03 19:26:15 +02:00

Fix migrations upgrade path for MySQL

For some reason, the migration path from unmanaged db (from alembic
point-of-view) to managed db, through the initial migration works well with
sqlite… But not with mysql where the db system tries to re-create the existing
tables.

This commit is a way to detect if we are migrating from pre-alembic era and
skip the first migration (which would do nothing anyway), marking it as already
executed.

It's quite hackish but that's the best I found so far to get it working with
both MySQL and SQLite.
This commit is contained in:
Jocelyn Delande 2016-06-18 12:13:46 +02:00
parent 5084cafe6b
commit a5579220e0

View file

@ -3,7 +3,7 @@ import warnings
from flask import Flask, g, request, session from flask import Flask, g, request, session
from flask.ext.babel import Babel from flask.ext.babel import Babel
from flask.ext.migrate import Migrate, upgrade from flask.ext.migrate import Migrate, upgrade, stamp
from raven.contrib.flask import Sentry from raven.contrib.flask import Sentry
from web import main, db, mail from web import main, db, mail
@ -15,6 +15,15 @@ from utils import minimal_round
app = Flask(__name__) app = Flask(__name__)
def pre_alembic_db():
""" Checks if we are migrating from a pre-alembic ihatemoney
"""
con = db.engine.connect()
tables_exist = db.engine.dialect.has_table(con, 'project')
alembic_setup = db.engine.dialect.has_table(con, 'alembic_version')
return tables_exist and not alembic_setup
def configure(): def configure():
""" A way to (re)configure the app, specially reset the settings """ A way to (re)configure the app, specially reset the settings
""" """
@ -49,6 +58,11 @@ db.app = app
# db migrations # db migrations
migrate = Migrate(app, db) migrate = Migrate(app, db)
if pre_alembic_db():
with app.app_context():
# fake the first migration
stamp(revision='b9a10d5d63ce')
# auto-execute migrations on runtime # auto-execute migrations on runtime
with app.app_context(): with app.app_context():
upgrade() upgrade()