2014-09-28 5 views
2

pythonanywhere에서 flask-migrate를 성공적으로 사용하는 예가 있습니까? 누구든지 app.py를 사용한 마이그레이션이 어떻게 생겼는지에 대한 간단한 예가 있습니까? 의 라인을 따라 뭔가 :pythonanywhere에서 flask-migrate를 어떻게 사용합니까?

from flask import Flask, request, render_template 
from flask.ext.sqlalchemy import SQLAlchemy 
from flask.ext.migrate import Migrate, MigrateCommand 
from flask.ext.script import Manager 
app = Flask(__name__) 
app.secret_key = 'This is really unique and secret' 
app.config['SQLALCHEMY_DATABASE_URI'] = '<whatever>' 
db = SQLAlchemy(app) 
db.create_all() 
manager = Manager(app) 
migrate = Migrate(app, db) 
manager.add_command('db', MigrateCommand) 

내가

python app.py db init 

를 실행하려고 할 때 마이그레이션 저장소를 생성하는 데 실패 찾을 수 있습니다. 이 pythonanywhere 파일 허가 문제가 될 수 있습니까?

+0

내 질문의 일부가 바보입니다. 문서에 명시된 바와 같이 pip 설치 --user flask-migrate를 사용하여 필요한 확장자를 얻을 수 있습니다. –

+0

db init을 시도 할 때 어떤 오류가 발생합니까? – Glenn

+0

오류가 없습니다. 그러나 마이그레이션 스크립트도 생성되지 않았습니다. –

답변

1

플라스크의 저자 - 여기로 이동하십시오.

아이디어는 개발 환경에서 db 저장소를 생성한다는 것입니다. 원본 파일과 함께 저장소를 소스 제어에 커밋해야합니다.

그런 다음 호스팅 서비스에 응용 프로그램을 설치하면 upgrade 명령을 실행하여 db를 만들고 최신 개정판으로 마이그레이션 할 수 있습니다.

업데이트 : 아래의 의견을 바탕으로 처음부터 응용 프로그램을 개발하고 싶습니다. 방금이 테스트를 통해 db 리포지토리를 만들고 마이그레이션을 만들고 적용 할 수있었습니다. 내가 한 것은 pythonanywhere bash 콘솔을 시작하는 것입니다.

17:39 ~ $ mkdir dbtest 
17:39 ~ $ cd dbtest 
17:39 ~/dbtest $ virtualenv venv 
New python executable in venv/bin/python2.7 
Also creating executable in venv/bin/python 
Installing setuptools............done. 
Installing pip...............done. 
17:39 ~/dbtest $ . venv/bin/activate 
(venv)17:39 ~/dbtest $ pip install flask flask-migrate 
... 
(venv)17:42 ~/dbtest $ vi dbtest.py 
... (entered flask-migrate example code, see below) 
(venv)17:47 ~/dbtest $ python dbtest.py 
usage: dbtest.py [-?] {shell,db,runserver} ... 

positional arguments: 
    {shell,db,runserver} 
    shell    Runs a Python shell inside Flask application context. 
    db     Perform database migrations 
    runserver   Runs the Flask development server i.e. app.run() 

optional arguments: 
    -?, --help   show this help message and exit 
(venv)17:47 ~/dbtest $ python dbtest.py db init                                                
    Creating directory /home/miguelgrinberg/dbtest/migrations ... done 
    Creating directory /home/miguelgrinberg/dbtest/migrations/versions ... done 
    Generating /home/miguelgrinberg/dbtest/migrations/README ... done 
    Generating /home/miguelgrinberg/dbtest/migrations/alembic.ini ... done 
    Generating /home/miguelgrinberg/dbtest/migrations/env.py ... done 
    Generating /home/miguelgrinberg/dbtest/migrations/script.py.mako ... done 
    Generating /home/miguelgrinberg/dbtest/migrations/env.pyc ... done 
    Please edit configuration/connection/logging settings in '/home/miguelgrinberg/dbtest/migrations/alembic.ini' before proceeding. 
(venv)17:54 ~/dbtest $ python dbtest.py db migrate                                               
INFO [alembic.migration] Context impl SQLiteImpl. 
INFO [alembic.migration] Will assume non-transactional DDL. 
INFO [alembic.autogenerate.compare] Detected added table 'user' 
    Generating /home/miguelgrinberg/dbtest/migrations/versions/1c4aa671e23a_.py ... done 
(venv)17:54 ~/dbtest $ python dbtest.py db upgrade                                               
INFO [alembic.migration] Context impl SQLiteImpl. 
INFO [alembic.migration] Will assume non-transactional DDL. 
INFO [alembic.migration] Running upgrade None -> 1c4aa671e23a, empty message 
(venv)17:55 ~/dbtest $ ls -l 
total 8 
-rw-r--r-- 1 miguelgrinberg registered_users 3072 Sep 28 2014 app.db 
-rwxrwxr-x 1 miguelgrinberg registered_users 511 Sep 28 17:48 dbtest.py 
drwxrwxr-x 3 miguelgrinberg registered_users 100 Sep 28 17:55 migrations 
drwxrwxr-x 6 miguelgrinberg registered_users 52 Sep 28 17:41 venv 

나는 이것을 테스트하는 데 사용되는 예제 응용 프로그램은 다음과 같습니다 :

from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 
from flask.ext.script import Manager 
from flask.ext.migrate import Migrate, MigrateCommand 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db' 

db = SQLAlchemy(app) 
migrate = Migrate(app, db) 

manager = Manager(app) 
manager.add_command('db', MigrateCommand) 

class User(db.Model): 
    id = db.Column(db.Integer, primary_key = True) 
    name = db.Column(db.String(128)) 

if __name__ == '__main__': 
    manager.run() 

이미 마이그레이션 저장소가 생성 한 기회가 여기 내 전체 세션의 복사본입니다? 아니면 데이터베이스?

+0

안녕하세요. 왜냐하면 나는 멀리 dev에 환경 (내가 dev 환경으로 pythonanywhere를 사용)에서 마이 그 레이션 스크립트를 생성하지 않기 때문에 그것은 소스 제어가 절대적으로 마이 그 레이션 (또는 좋은 연습)에 대한 요구 사항인지 나에게 명확하지 않다. 아마도 O'Reilly 책의 섹션을 너무 빨리 읽었을 것입니다. –

+0

이 컨텍스트에서 "소스 제어"가 의미하는 바는 마이그레이션 파일을 소스 코드와 함께 유지한다는 것입니다. pythonanywhere에 응용 프로그램을 배포하고 있다고 가정하고 직접 개발하지 않았습니다. 내 대답에 다른 아이디어를 추가하겠습니다. – Miguel

+0

파일 "/usr/local/lib/python2.7/dist-packages/alembic/config.py", 142 행, set_main_option에서 self.file_config.set (self.config_ini_section, name, value) 파일 "/ usr /lib/python2.7/ConfigParser.py "라인 753 세트 ConfigParser.set 파일"/usr/lib/python2.7/ConfigParser.py "396 행, in set raise NoSectionError (section) ConfigParser.NoSectionError : 섹션 없음 : 'alembic' –