10

Heroku でかなり単純な Flask + SQLAlchemy サイトを実行しようとしていますが、マイグレーションを実行して DB をセットアップする方法がわかりません。を実行するheroku run alembic upgrade headと、次のエラーが表示されます。

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 のものをロードしようとしていることを示しているように見えます (これは私が持っているデフォルトです) が、Heroku PostgreSQL 接続を使用できるようにするためにalembic.ini、次のようにしています:env.py

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)

appFlask インスタンスです。Flask-SQLAlchemy を使用してアプリでの DB の使用を DRY し、Flask-Heroku を使用してすべての Flask 構成変数が Heroku 環境変数から適切にプルされていることを確認しています。

4

3 に答える 3

14

Flask-Heroku が の値を取得していることが判明しましたがDATABASE_URL、これは Heroku 上の私のアプリには存在しません。代わりに、の値を に手動でマッピングするとHEROKU_POSTGRESQL_CRIMSON_URLapp.config['SQLALCHEMY_DATABASE_URI']期待どおりに機能します。

pg:promote更新:そして、そのアプリのデフォルトを設定するためにDBを忘れていたことが判明しました。これがDATABASE_URL存在しない理由です。したがって、本当の解決策は、DB を昇格させることを忘れないことです。

更新 2: まとめてみましょう: Flask-herokuを使用してアプリの構成に適切なものを挿入しSQLALCHEMY_DATABASE_URI、微調整して の URL の代わりにアプリの構成を使用し、Heroku のサーバーで alembic を実行します(または実行したい移行)。 . これにより、さまざまな環境に合わせて ini ファイルを調整する必要がなくなります (ホスティング環境が管理するため)。env.pySQLALCHEMY_DATABASE_URIalembic.iniheroku run alembic upgrade head

于 2012-11-07T02:43:25.233 に答える