2012-11-07 6 views
9

Sto cercando di eseguire un sito Flask + SQLAlchemy piuttosto semplice su Heroku, ma non sono sicuro di come eseguire le mie migrazioni per configurare il mio DB. Quando eseguo heroku run alembic upgrade head, ottengo il seguente errore:Come devo eseguire le migrazioni alambicco su Heroku?

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 

Per me, questo sembra indicare che sta cercando di caricare roba SQLite (che è il default che ho in alembic.ini), ma ho il seguente nel mio env.py nel tentativo di rendere utilizzare la connessione Heroku PostgreSQL:

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) 

dove app è un'istanza Flask. Sto usando Flask-SQLAlchemy per ASCIUGARE l'utilizzo del mio DB nell'app, e Flask-Heroku per assicurarmi che tutte le variabili di configurazione di Flask vengano estratte correttamente dalle variabili d'ambiente di Heroku.

risposta

13

Si scopre che Flask-Heroku sta tirando il valore di DATABASE_URL, che non esiste per la mia app su Heroku. Se invece, mappare manualmente il valore di HEROKU_POSTGRESQL_CRIMSON_URL in app.config['SQLALCHEMY_DATABASE_URI'], funziona come previsto.

AGGIORNAMENTO: E si è scoperto che mi sono dimenticato di pg:promote il mio DB in modo da avere un valore predefinito per tale app, motivo per cui DATABASE_URL è inesistente. Quindi la vera soluzione è: non dimenticare di promuovere il tuo DB.

UPDATE 2: Permettetemi di riassumere: utilizzare flask-heroku per iniettare la giusta SQLALCHEMY_DATABASE_URI nella configurazione della tua app, modificare env.py per usare la vostra applicazione configurato SQLALCHEMY_DATABASE_URI anziché l'URL nel alembic.ini, e quindi eseguire alambicco sui server di Heroku via heroku run alembic upgrade head (o qualunque sia la migrazione che si desidera eseguire). Questo ti impedirà di modificare il file ini per adattarlo a diversi ambienti (perché gli ambienti di hosting lo gestiranno automaticamente).

+0

Grazie, grazie, grazie. – wheaties

+0

Questo non ha funzionato per me, puoi aiutarmi, http://stackoverflow.com/questions/17501082/alembic-migrations-for-flask – GangstaGraham