2012-11-07 8 views
9

私はかなり簡単なFlask + SQLAlchemyサイトをHeroku上で実行しようとしていますが、マイグレーションをどのように実行して自分のDBをセットアップするべきかはわかりません。私env.pyで、次の私には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 

が、これは(私がalembic.iniを持っているデフォルトです)sqliteのものをロードしようとして示しているようだが、私は持っている:私はheroku run alembic upgrade headを実行すると、私は次のエラーを取得しますappフラスコインスタンスです

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) 

:それはHerokuのPostgreSQL接続を使用するように努めています。私はFlask-SQLAlchemyを使用してアプリケーションでのDB使用量を節約し、Flask-HerokuはすべてのFlask設定変数がHeroku環境変数から適切に引き出されていることを確認しています。

答えて

13

Flask-Herokuの値がDATABASE_URLであることが判明しましたが、それはHerokuのアプリでは存在しません。代わりに、手動で​​の値をapp.config['SQLALCHEMY_DATABASE_URI']にマップすると、期待どおりに動作します。

更新:pg:promote私のDBに忘れてしまったので、そのアプリケーションのデフォルトを持っていることがわかりました。そのため、DATABASE_URLは存在しません。したがって、実際の解決策は、DBを宣伝することを忘れないでください。

UPDATE 2:alembic.iniに代わりにURLをあなたのアプリのように構成SQLALCHEMY_DATABASE_URIを使用するようにenv.pyを微調整し、あなたのアプリケーションのconfigに適切なSQLALCHEMY_DATABASE_URIを注入するflask-herokuを使用して、heroku run alembic upgrade headを通じてHerokuののサーバーにアレンビック実行(または:私が要約してみましょうどんな移行を実行したいか)。これにより、異なる環境に合わせてiniファイルを調整する必要がなくなります(ホスティング環境によって管理されるため)。

+0

ありがとう、ありがとう、ありがとう。 – wheaties

+0

これは私のために働かなかった、あなたが私を助けてください、http://stackoverflow.com/questions/17501082/alembic-migrations-for-flask – GangstaGraham

関連する問題