2012-11-07 2 views
9

Heroku에서 매우 간단한 Flask + SQLAlchemy 사이트를 실행하려고하는데 내 DB를 설정하기 위해 마이그레이션을 어떻게 실행해야하는지 잘 모르겠습니다. 내 env.py에서 다음 나에게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 

, 이것은이 (내가 alembic.ini에있는 기본값) sqlite가 물건을로드하려고 나타낼 것으로 보인다,하지만 난이 : 나는 heroku run alembic upgrade head를 실행하면, 나는 다음과 같은 오류가 발생합니다

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이 플라스크 인스턴스 : 노력으로는 Heroku가 PostgreSQL의 연결을 사용할 수 있도록합니다. 나는 Flask-SQLAlchemy를 사용하여 응용 프로그램에서 DB 사용량을 줄이고 Flask-Heroku를 사용하여 모든 Flask 구성 변수가 Heroku 환경 변수에서 제대로 가져 오는지 확인합니다.

답변

13

Flask-Heroku가 DATABASE_URL 값을 가져 오는 것으로 밝혀졌습니다.이 기능은 Heroku의 내 앱에는 존재하지 않습니다. 대신 수동으로 HEROKU_POSTGRESQL_CRIMSON_URL 값을 app.config['SQLALCHEMY_DATABASE_URI']으로 매핑하면 예상대로 작동합니다.

업데이트 : pg:promote 내 DB에 잊어 버렸으므로 해당 응용 프로그램의 기본값이 있습니다. 따라서 DATABASE_URL은 존재하지 않습니다. 따라서 실제 해결책은 DB를 홍보하는 것을 잊지 마십시오.

업데이트 2 : 제가 정리해 보자 : 앱의 설정에 적절한 SQLALCHEMY_DATABASE_URI를 주입 flask-heroku를 사용하여 앱의 대신 alembic.ini에서 URL의 SQLALCHEMY_DATABASE_URI을 구성 사용한 다음 heroku run alembic upgrade head를 통해 Heroku가의 서버에서 증류기 실행 env.py를 조정할 (또는 어떤 마이그레이션을 실행하든간에). 이렇게하면 ini 파일을 조정하여 다른 환경에 맞게 조정할 필요가 없습니다 (호스팅 환경에서 관리하므로).

+0

감사합니다. 감사합니다. 감사합니다. – wheaties

+0

이것은 나를 위해 작동하지 않았다, 제발 나를 도와주세요, http://stackoverflow.com/questions/17501082/alembic-migrations-for-flask – GangstaGraham

관련 문제