flask script, alembic 사용법 - nl-seoultech/tento-server GitHub Wiki
tento-server 에 경우는 제가 먼저 짜놓은 flask-foil 을 이용해서 기본셋팅을 해놓을건데요. alembic
의 명령어나 flask-script
의 명령어를 manager.py
에 다 만들어놨기때문에 사용하시면됩니다. 먼저 생성되어있는 exam.cfg.py
를 dev.cfg.py
나 다른 적당한 이름으로 복사합니다.
$ cp exam.cfg.py dev.cfg.py
설정파일의 설정중 ALEMBIC_SCRIPT_LOCATION
를 바꿔야하는데요 프로젝트에 있는 migrations
디렉토리 위치를 적어주면됩니다.
$ pwd
/Users/hyojun/src/tento-server/tento
$ cat dev.cfg.py
...
ALEMBIC_SCRIPT_LOCATION = '/Users/hyojun/src/tento-server/tento/migrations/'
...
주의하실점은 마지막이 /
로 끝나야된다는거정도입니다. 설정이 다끝나면 명령어 실행을하면됩니다.
$ python manager.py -c [config-file] [command]
인데요. 존재하는 명령어는
- runserver
- shell
- downgrade
- upgrade
- revision
- current
- branch
- history
입니다.
flask-script가 제공하는 명령어
$ python manager.py -c dev.cfg.py runserver
를 하면 서버가 켜집니다. -h
옵션으로 host를 설정할수있고, -p
옵션으로 포트를 설정할수있습니다.
$ python manager.py -c dev.cfg.py runserver -h admire.kr -p 1234
다른 옵션들은 --help
옵션으로 확인할수있습니다
$ python manager.py -c dev.cfg.py runserver --help
flask-script
에선 우리가 만든 flask 앱의 환경을 바로 쉘에서 확인할수있도록 shell
명령어도 제공합니다.
$ python manager.py -c dev.cfg.py shell
>>>
생긴건 기본 python shell이랑 똑같이 생겼지만 우리 flask 앱의 context가 포함되어있는 쉘이라 유용하게사용할수있습니다.
>>> with app.test_client() as c:
... c.get(url_for('users.hello_world'))
shell
명령어에 관해선 나중에 사용하면서 같이 보도록하겠습니다.
alembic 에서 제공하는 명령어
alembic은 sqlalchemy를 위한 마이그레이션 툴입니다. 스키마의 변경, 테이블의 추가, 변경, 삭제 등을 손쉽게 버전관리하듯이 관리할수있습니다.
$ alembic init
로 시작할수있는데, 이렇게되면 alembic.ini
가 생겨버리기때문에 설정파일을 dev.cfg.py
같이 한파일로 묶어버리기위해서 manager.py
에 명령어를 전부 구현해놓았습니다. 스키마의 어떤 변경점이 있다면, revision을 생성하면됩니다.
$ python manager.py -c dev.cfg.py revision -m "Add user tables"
--autogenerated [y]
이렇게하면 /root-dir/tento/migrations/version/
에 마이그레이션 스크립트가 자동으로 생성됩니다. upgrade
함수는 마이그레이션 버전이 올라갈때 사용되는 함수고, downgrade
는 버전을 낮출때 사용하는 함수입니다. revision이 생성되면 upgrade
명령으로 가장 최신 버전(head)로 revision의 상태를 올릴수있습니다.
$ python manager.py -c dev.cfg.py upgrade
만약 버전을 낮추고싶다면 downgrade
명령어를 사용하면됩니다.
$ python manager.py -c dev.cfg.py downgrade
이렇게 생성된 revision들을 전부다 보고싶다면, history
명령어로 확인하면됩니다.
$ python manager.py -c dev.cfg.py history
현재 revision을 확인하기위해선 current
명령어로 확인하면됩니다.
$ python manager.py -c dev.cfg.py current