Run the db migrations on container start unless we're running against Sqlite.

This commit is contained in:
Jake Moshenko 2014-05-13 15:20:17 -04:00
parent 553ef36e9b
commit f049f738da
3 changed files with 28 additions and 11 deletions

View file

@ -24,7 +24,7 @@ RUN apt-get install -y nodejs
RUN npm install -g grunt-cli RUN npm install -g grunt-cli
# LDAP # LDAP
RUN apt-get install libldap2-dev libsasl2-dev RUN apt-get install -y libldap2-dev libsasl2-dev
ADD binary_dependencies binary_dependencies ADD binary_dependencies binary_dependencies
RUN gdebi --n binary_dependencies/*.deb RUN gdebi --n binary_dependencies/*.deb
@ -35,15 +35,19 @@ ADD requirements.txt requirements.txt
RUN virtualenv --distribute venv RUN virtualenv --distribute venv
RUN venv/bin/pip install -r requirements.txt 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 auth auth
ADD buildstatus buildstatus ADD buildstatus buildstatus
ADD conf conf
ADD data data ADD data data
ADD endpoints endpoints ADD endpoints endpoints
ADD features features ADD features features
ADD grunt grunt
ADD screenshots screenshots ADD screenshots screenshots
ADD static static
ADD storage storage ADD storage storage
ADD templates templates ADD templates templates
ADD util util ADD util util
@ -54,17 +58,20 @@ ADD application.py application.py
ADD config.py config.py ADD config.py config.py
ADD initdb.py initdb.py ADD initdb.py initdb.py
ADD external_libraries.py external_libraries.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/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/gunicorn.sh /etc/service/gunicorn/run
ADD conf/init/nginx.sh /etc/service/nginx/run ADD conf/init/nginx.sh /etc/service/nginx/run
ADD conf/init/diffsworker.sh /etc/service/diffsworker/run ADD conf/init/diffsworker.sh /etc/service/diffsworker/run
ADD conf/init/webhookworker.sh /etc/service/webhookworker/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. # Download any external libs.
RUN mkdir static/fonts RUN mkdir static/fonts
RUN mkdir static/ldn RUN mkdir static/ldn
@ -75,7 +82,6 @@ RUN venv/bin/python -m external_libraries
ADD test test ADD test test
RUN TEST=true venv/bin/python -m unittest discover RUN TEST=true venv/bin/python -m unittest discover
RUN rm -rf /conf/stack
VOLUME ["/conf/stack", "/mnt/logs"] VOLUME ["/conf/stack", "/mnt/logs"]
EXPOSE 443 80 EXPOSE 443 80

5
conf/init/runmigration.sh Executable file
View file

@ -0,0 +1,5 @@
#! /bin/bash
set -e
# Run the database migration
PYTHONPATH=. venv/bin/alembic upgrade head

View file

@ -3,8 +3,9 @@ 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
from peewee import SqliteDatabase
from data.database import all_models from data.database import all_models, db
from app import app from app import app
from data.model.sqlalchemybridge import gen_sqlalchemy_metadata from data.model.sqlalchemybridge import gen_sqlalchemy_metadata
@ -41,7 +42,7 @@ def run_migrations_offline():
""" """
url = unquote(app.config['DB_URI']) 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(): with context.begin_transaction():
context.run_migrations() context.run_migrations()
@ -53,6 +54,11 @@ def run_migrations_online():
and associate a connection with the context. and associate a connection with the context.
""" """
if isinstance(db.obj, SqliteDatabase):
print ('Skipping Sqlite migration!')
return
engine = engine_from_config( engine = engine_from_config(
config.get_section(config.config_ini_section), config.get_section(config.config_ini_section),
prefix='sqlalchemy.', prefix='sqlalchemy.',