(py27)jpipes@uberbox:~/repos/openstack/ceilometer/ceilometer/storage/sqlalchemy/migrate_repo$ python manage.py upgrade sqlite:////home/jpipes/repos/openstack/ceilometer/.tox/py27/local/lib/python2.7/site-packages/ceilometer/openstack/common/db/ceilometer.sqlite .
0 -> 1...
done
1 -> 2...
done
2 -> 3...
done
3 -> 4...
done
4 -> 5...
done
5 -> 6...
done
6 -> 7...
done
7 -> 8...
done
8 -> 9...
done
9 -> 10...
done
10 -> 11...
done
11 -> 12...
done
(py27)jpipes@uberbox:~/repos/openstack/ceilometer/ceilometer/storage/sqlalchemy/migrate_repo$ cd ../alembic/
(py27)jpipes@uberbox:~/repos/openstack/ceilometer/ceilometer/storage/sqlalchemy/alembic$ alembic current
Current revision for sqlite:////home/jpipes/repos/openstack/ceilometer/.tox/py27/local/lib/python2.7/site-packages/ceilometer/openstack/common/db/ceilometer.sqlite: None
(py27)jpipes@uberbox:~/repos/openstack/ceilometer/ceilometer/storage/sqlalchemy/alembic$ alembic upgrade head
/home/jpipes/repos/openstack/ceilometer/.tox/py27/local/lib/python2.7/site-packages/alembic/util.py:163: UserWarning: Skipping unsupported ALTER for creation of implicit constraint
warnings.warn(msg)
Traceback (most recent call last):
File "/home/jpipes/repos/openstack/ceilometer/.tox/py27/bin/alembic", line 8, in <module>
load_entry_point('alembic==0.6.0', 'console_scripts', 'alembic')()
File "/home/jpipes/repos/openstack/ceilometer/.tox/py27/local/lib/python2.7/site-packages/alembic/config.py", line 294, in main
CommandLine(prog=prog).main(argv=argv)
File "/home/jpipes/repos/openstack/ceilometer/.tox/py27/local/lib/python2.7/site-packages/alembic/config.py", line 289, in main
self.run_cmd(cfg, options)
File "/home/jpipes/repos/openstack/ceilometer/.tox/py27/local/lib/python2.7/site-packages/alembic/config.py", line 275, in run_cmd
**dict((k, getattr(options, k)) for k in kwarg)
File "/home/jpipes/repos/openstack/ceilometer/.tox/py27/local/lib/python2.7/site-packages/alembic/command.py", line 124, in upgrade
script.run_env()
File "/home/jpipes/repos/openstack/ceilometer/.tox/py27/local/lib/python2.7/site-packages/alembic/script.py", line 193, in run_env
util.load_python_file(self.dir, 'env.py')
File "/home/jpipes/repos/openstack/ceilometer/.tox/py27/local/lib/python2.7/site-packages/alembic/util.py", line 177, in load_python_file
module = load_module(module_id, path)
File "/home/jpipes/repos/openstack/ceilometer/.tox/py27/local/lib/python2.7/site-packages/alembic/compat.py", line 39, in load_module
return imp.load_source(module_id, path, fp)
File "/home/jpipes/repos/openstack/ceilometer/ceilometer/storage/sqlalchemy/alembic/env.py", line 77, in <module>
run_migrations_online()
File "/home/jpipes/repos/openstack/ceilometer/ceilometer/storage/sqlalchemy/alembic/env.py", line 71, in run_migrations_online
context.run_migrations()
File "<string>", line 7, in run_migrations
File "/home/jpipes/repos/openstack/ceilometer/.tox/py27/local/lib/python2.7/site-packages/alembic/environment.py", line 652, in run_migrations
self.get_context().run_migrations(**kw)
File "/home/jpipes/repos/openstack/ceilometer/.tox/py27/local/lib/python2.7/site-packages/alembic/migration.py", line 224, in run_migrations
change(**kw)
File "/home/jpipes/repos/openstack/ceilometer/ceilometer/storage/sqlalchemy/alembic/versions/17738166b91_fix_meter_resource_m.py", line 46, in upgrade
change_type(sa.Text)
File "/home/jpipes/repos/openstack/ceilometer/ceilometer/storage/sqlalchemy/alembic/versions/17738166b91_fix_meter_resource_m.py", line 39, in change_type
new_column.create(meter)
AttributeError: 'Column' object has no attribute 'create'
It doesn't look like the Alembic migrations have ever been tested properly with SQLite... or anything for that matter.
I do not understand how the base storage SQLAlchemy test case is doing a conn.upgrade() in its setUp() method and tests are actually passing... none of it seems to work when you try it out.
Also, things to keep in mind... Alembic does not handle a number of SQLite ALTER TABLE missing operations, namely DROP COLUMN and RENAME COLUMN:
https:/ /bitbucket. org/zzzeek/ alembic/ issue/21/ column- renames- not-supported- on-sqlite
We worked around this with SQLite specialized migration SQL scripts in sqlalchemy-migrate, but the same does not exist in Alembic. Instead it looks like we will need to jump through a number of hoops -- including copying table schemas and data into new table schemas.