From f049f738da734368e9de012d6a5d2beebaa6978e Mon Sep 17 00:00:00 2001 From: Jake Moshenko Date: Tue, 13 May 2014 15:20:17 -0400 Subject: [PATCH] Run the db migrations on container start unless we're running against Sqlite. --- Dockerfile | 24 +++++++++++++++--------- conf/init/runmigration.sh | 5 +++++ data/migrations/env.py | 10 ++++++++-- 3 files changed, 28 insertions(+), 11 deletions(-) create mode 100755 conf/init/runmigration.sh diff --git a/Dockerfile b/Dockerfile index 365adfec7..c581c1004 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,7 +24,7 @@ RUN apt-get install -y nodejs RUN npm install -g grunt-cli # LDAP -RUN apt-get install libldap2-dev libsasl2-dev +RUN apt-get install -y libldap2-dev libsasl2-dev ADD binary_dependencies binary_dependencies RUN gdebi --n binary_dependencies/*.deb @@ -35,15 +35,19 @@ ADD requirements.txt requirements.txt RUN virtualenv --distribute venv RUN venv/bin/pip install -r requirements.txt +# Add the static assets and run grunt +ADD grunt grunt +ADD static static +RUN cd grunt && npm install +RUN cd grunt && grunt + +# Add the backend assets ADD auth auth ADD buildstatus buildstatus -ADD conf conf ADD data data ADD endpoints endpoints ADD features features -ADD grunt grunt ADD screenshots screenshots -ADD static static ADD storage storage ADD templates templates ADD util util @@ -54,17 +58,20 @@ ADD application.py application.py ADD config.py config.py ADD initdb.py initdb.py ADD external_libraries.py external_libraries.py +ADD alembic.ini alembic.ini + +# Add the config +ADD conf conf +RUN rm -rf /conf/stack ADD conf/init/mklogsdir.sh /etc/my_init.d/ +ADD conf/init/runmigration.sh /etc/my_init.d/ + ADD conf/init/gunicorn.sh /etc/service/gunicorn/run ADD conf/init/nginx.sh /etc/service/nginx/run ADD conf/init/diffsworker.sh /etc/service/diffsworker/run ADD conf/init/webhookworker.sh /etc/service/webhookworker/run -# Build the compiled binaries of JS and CSS -RUN cd grunt && npm install -RUN cd grunt && grunt - # Download any external libs. RUN mkdir static/fonts RUN mkdir static/ldn @@ -75,7 +82,6 @@ RUN venv/bin/python -m external_libraries ADD test test RUN TEST=true venv/bin/python -m unittest discover -RUN rm -rf /conf/stack VOLUME ["/conf/stack", "/mnt/logs"] EXPOSE 443 80 diff --git a/conf/init/runmigration.sh b/conf/init/runmigration.sh new file mode 100755 index 000000000..5a2ef5cae --- /dev/null +++ b/conf/init/runmigration.sh @@ -0,0 +1,5 @@ +#! /bin/bash +set -e + +# Run the database migration +PYTHONPATH=. venv/bin/alembic upgrade head diff --git a/data/migrations/env.py b/data/migrations/env.py index 5b1564b50..c267c2f50 100644 --- a/data/migrations/env.py +++ b/data/migrations/env.py @@ -3,8 +3,9 @@ from alembic import context from sqlalchemy import engine_from_config, pool from logging.config import fileConfig from urllib import unquote +from peewee import SqliteDatabase -from data.database import all_models +from data.database import all_models, db from app import app from data.model.sqlalchemybridge import gen_sqlalchemy_metadata @@ -41,7 +42,7 @@ def run_migrations_offline(): """ url = unquote(app.config['DB_URI']) - context.configure(url=url, target_metadata=target_metadata) + context.configure(url=url, target_metadata=target_metadata, transactional_ddl=True) with context.begin_transaction(): context.run_migrations() @@ -53,6 +54,11 @@ def run_migrations_online(): and associate a connection with the context. """ + + if isinstance(db.obj, SqliteDatabase): + print ('Skipping Sqlite migration!') + return + engine = engine_from_config( config.get_section(config.config_ini_section), prefix='sqlalchemy.',