Fix migration issues:

- MySQL 5.5 doesn't support the now() call as a default
  - Postgres migration isn't auto-committed, so we have to check if the table exists first
This commit is contained in:
Joseph Schorr 2014-11-03 15:25:55 -05:00
parent 225c2be355
commit 9aa72c5cc2
3 changed files with 21 additions and 6 deletions

View file

@ -5,7 +5,7 @@ import os
from alembic import context from alembic import context
from sqlalchemy import engine_from_config, pool from sqlalchemy import engine_from_config, pool
from logging.config import fileConfig from logging.config import fileConfig
from urllib import unquote from urllib import unquote, quote
from peewee import SqliteDatabase from peewee import SqliteDatabase
from data.database import all_models, db from data.database import all_models, db
@ -24,6 +24,11 @@ if 'GENMIGRATE' in os.environ:
else: else:
db_uri = 'postgresql://postgres@%s/genschema' % (docker_host_ip) db_uri = 'postgresql://postgres@%s/genschema' % (docker_host_ip)
if 'DB_URI' in os.environ:
db_uri = os.environ['DB_URI']
app.config['DB_URI'] = db_uri
config = context.config config = context.config
config.set_main_option('sqlalchemy.url', db_uri) config.set_main_option('sqlalchemy.url', db_uri)
@ -69,7 +74,7 @@ def run_migrations_online():
""" """
if isinstance(db.obj, SqliteDatabase) and not 'GENMIGRATE' in os.environ: if isinstance(db.obj, SqliteDatabase) and not 'GENMIGRATE' in os.environ and not 'DB_URI' in os.environ:
print ('Skipping Sqlite migration!') print ('Skipping Sqlite migration!')
return return

View file

@ -17,7 +17,7 @@ from sqlalchemy.dialects import mysql
def upgrade(tables): def upgrade(tables):
### commands auto generated by Alembic - please adjust! ### ### commands auto generated by Alembic - please adjust! ###
op.add_column('user', sa.Column('invalid_login_attempts', sa.Integer(), nullable=False, server_default="0")) op.add_column('user', sa.Column('invalid_login_attempts', sa.Integer(), nullable=False, server_default="0"))
op.add_column('user', sa.Column('last_invalid_login', sa.DateTime(), nullable=False, server_default=sa.func.now())) op.add_column('user', sa.Column('last_invalid_login', sa.DateTime(), nullable=False))
### end Alembic commands ### ### end Alembic commands ###

View file

@ -3,7 +3,7 @@ import zlib
import sys import sys
from data import model from data import model
from data.database import ImageStorage from data.database import ImageStorage, configure
from app import app, storage as store from app import app, storage as store
from data.database import db, db_random_func from data.database import db, db_random_func
from util.gzipstream import ZLIB_GZIP_WINDOW from util.gzipstream import ZLIB_GZIP_WINDOW
@ -14,11 +14,13 @@ logger = logging.getLogger(__name__)
CHUNK_SIZE = 5 * 1024 * 1024 CHUNK_SIZE = 5 * 1024 * 1024
def backfill_sizes_from_data(): def backfill_sizes_from_data():
logger.setLevel(logging.DEBUG) logger.setLevel(logging.DEBUG)
logger.debug('Starting uncompressed image size backfill') logger.debug('Starting uncompressed image size backfill')
# Make sure we have a reference to the current DB.
configure(app.config)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch = logging.StreamHandler(sys.stdout) ch = logging.StreamHandler(sys.stdout)
@ -27,6 +29,14 @@ def backfill_sizes_from_data():
encountered = set() encountered = set()
# Try reading the ImageStorage table count. If it doesn't exist, then this is a postgres
# initial setup migration and we can skip this step anyway.
try:
ImageStorage.select().count()
except:
logger.debug('Skipping migration for new setup')
return
while True: while True:
# Load the record from the DB. # Load the record from the DB.
batch_ids = list(ImageStorage batch_ids = list(ImageStorage