2012-11-07 10 views
9

Heroku'da oldukça basit bir Flask + SQLAlchemy sitesi çalıştırmaya çalışıyorum ancak DB'mi kurmak için geçişlerimi nasıl çalıştırmalıyım emin değilim. Benim env.py aşağıdaki Bana göreHeroku'da alemik göçleri nasıl yürütmeliyim?

Running `alembic upgrade head` attached to terminal... up, run.1 
Traceback (most recent call last): 
    File "/app/.heroku/venv/bin/alembic", line 12, in <module> 
    load_entry_point('alembic==0.4.0', 'console_scripts', 'alembic')() 
    File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/config.py", line 255, in main 
    CommandLine(prog=prog).main(argv=argv) 
    File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/config.py", line 250, in main 
    self.run_cmd(cfg, options) 
    File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/config.py", line 241, in run_cmd 
    **dict((k, getattr(options, k)) for k in kwarg) 
    File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/command.py", line 124, in upgrade 
    script.run_env() 
    File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/script.py", line 191, in run_env 
    util.load_python_file(self.dir, 'env.py') 
    File "/app/.heroku/venv/lib/python2.7/site-packages/alembic/util.py", line 185, in load_python_file 
    module = imp.load_source(module_id, path, open(path, 'rb')) 
    File "alembic/env.py", line 80, in <module> 
    run_migrations_online() 
    File "alembic/env.py", line 63, in run_migrations_online 
    poolclass=pool.NullPool) 
    File "/app/.heroku/venv/lib/python2.7/site-packages/sqlalchemy/engine/__init__.py", line 349, in engine_from_config 
    return create_engine(url, **opts) 
    File "/app/.heroku/venv/lib/python2.7/site-packages/sqlalchemy/engine/__init__.py", line 330, in create_engine 
    return strategy.create(*args, **kwargs) 
    File "/app/.heroku/venv/lib/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 64, in create 
    dbapi = dialect_cls.dbapi(**dbapi_args) 
    File "/app/.heroku/venv/lib/python2.7/site-packages/sqlalchemy/dialects/sqlite/pysqlite.py", line 289, in dbapi 

, işte (ı alembic.ini içinde bulunan varsayılan olan) sqlite şeyler yüklemeye çalışıyor işaret gibi görünüyor, ama var: Ben heroku run alembic upgrade head çalıştırdığınızda, aşağıdaki hatayı alıyorum

cur_db_uri = config.get_section_option('alembic', 'sqlalchemy.url') 
my_db_uri = app.config.get('SQLALCHEMY_DATABASE_URI', cur_db_uri) 
config.set_section_option('alembic', 'sqlalchemy.url', my_db_uri) 

nerede app bir Matara örneğidir: çabasıyla o Heroku PostgreSQL bağlantısı kullanmak yapmak. Ben Flask-SQLAlchemy app benim DB kullanımı kadar Flask-SQLAlchemy ve tüm Flask yapılandırma değişkenler Heroku çevre değişkenleri düzgün çekilir emin olmak için Flask-Heroku kullanıyorum.

cevap

13

Bu, Flask-Heroku'nun Heroku'daki uygulamam için mevcut olmayan DATABASE_URL değerini çektiği ortaya çıkıyor. Bunun yerine, HEROKU_POSTGRESQL_CRIMSON_URL değerini el ile app.config['SQLALCHEMY_DATABASE_URI'] içine eşleştiriyorum, beklendiği gibi çalışıyor.

GÜNCELLEME: Ve bu uygulama için varsayılan bir varsayılan sahip olarak pg:promote benim DB unuttum çıkıyor, bu nedenle DATABASE_URL olmayan var. Yani gerçek çözüm: DB'nizi tanıtmayı unutmayın.

GÜNCELLEME 2: Beni özetleyelim: uygulamanızın yapılandırma içine doğru SQLALCHEMY_DATABASE_URI enjekte etmek flask-heroku kullanmak, uygulamanız Onun yerine alembic.ini URL'nin SQLALCHEMY_DATABASE_URI yapılandırılmış kullanmak ve sonra heroku run alembic upgrade head aracılığıyla Heroku sunucularında alembic çalıştırmak için env.py çimdik (veya ne tür bir geçiş yapmak istediğinizi belirtin). Bu, farklı ortamları ayarlamak için ini dosyasını değiştirmenize gerek kalmayacaktır (çünkü barındırma ortamları sizin için yönetecektir).

+0

Teşekkürler, teşekkürler, teşekkürler. – wheaties

+0

Bu benim için çalışmadı, lütfen bana yardım edebilir misiniz, http://stackoverflow.com/questions/17501082/alembic-migrations-for-flask – GangstaGraham