2012-11-07 52 views
9

我試圖在Heroku上運行一個相當簡單的Flask + SQLAlchemy站點,但我不確定應該如何運行我的遷移來設置我的數據庫。當我運行heroku run alembic upgrade head,我得到以下錯誤:我應該如何在Heroku上運行alembic遷移?

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 

對我來說,這似乎表明它試圖加載sqlite的東西(這是默認的我在alembic.ini),但我有我的env.py以下在努力使其使用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) 

其中app是瓶實例。我正在使用Flask-SQLAlchemy在應用程序中幹掉我的數據庫使用情況,並使用Flask-Heroku確保我的所有Flask配置變量都從Heroku環境變量中正確拉出。

回答

13

事實證明,Flask-Heroku拉動了價值DATABASE_URL,這在Heroku上並不適用於我的應用程序。相反,如果我手動將​​的值映射到app.config['SQLALCHEMY_DATABASE_URI'],它按預期工作。

更新:事實證明,我忘了pg:promote我的數據庫,以便有該應用程序的默認值,這就是爲什麼DATABASE_URL是不存在的。所以真正的解決方案是:不要忘記宣傳你的數據庫。

更新2:讓我來總結一下:使用flask-heroku注射合適的SQLALCHEMY_DATABASE_URI到您的應用程序的配置,調整env.py使用你的應用程序的配置SQLALCHEMY_DATABASE_URI,而不是在alembic.ini的URL,然後通過heroku run alembic upgrade head對Heroku的服務器上運行的蒸餾器(或無論你想運行什麼遷移)。這將防止你不得不調整ini文件來適應不同的環境(因爲託管環境會爲你管理它)。

+0

謝謝,謝謝,謝謝。 – wheaties

+0

這不適合我,你能幫我一下,http://stackoverflow.com/questions/17501082/alembic-migrations-for-flask – GangstaGraham

相關問題