flask
を使用してアプリケーションを設計していflask-sqlalchemy
ます。モデルの変更に合わせてデータベースの移行を制御するために、flask-migrate
alembic をラップしてflask-script
管理コンテキスト内で使用しています。
次の目標を達成するためにパッケージ配布を分割する方法を決定しようとしています
- メイン アプリケーション パッケージの依存関係の最小セット
- メインのアプリケーション モジュールに応じて、おそらくセカンダリ パッケージを使用して、移行と展開のための管理スクリプトとテスト データの配布を許可する
プロジェクトの構造は次のとおりです。
/
tests/ #test data
migrations/ #alembic root include env.py and alembic.ini
myapp/ # application package
setup.py
manage.py
wsgi.py
私manage.py
は次のように見えます。これは、オブジェクトをアプリにアタッチすることで、メイン アプリケーション パッケージの依存関係を回避する方法alembic
です。これにより、一般的なフラスコ/アプリ構成と同じ構成ファイルで移行構成を制御することもできます (構成コンテキストはマネージャーによってプッシュされ、.flask-migrate
Migrate
manage.py
Migrate.init_app
from myapp import db, create_app
from myapp.database import database_manager #sub manager for creating/dropping db
from flask_migrate import Migrate, MigrateCommand
def _create_app(*args, **kwargs):
app = create_app(*args, **kwargs)
if migration is not None:
migration.init_app(app)
return app
manager = Manager(_create_app)
migration = Migrate(db = db)
manager.add_command('database', database_manager)
manager.add_command('migration', MigrateCommand)
if __name__ == "__main__":
manager.run()
アプリケーションサブマネージャーは、sqlalchemy を使用してテーブルを作成し、ディレクトリから test_data をテーブルに入力するmyapp.database.database_manager
コマンドを有効にしますが、移行スクリプトをフックせず、アプリケーション構成コンテキストを使用して/コマンドを実行できるようにします。python manage.py database create/drop/test_data
tests/
python manage.py migration init/revision/migrate/...
flask-migrate
alembic
このアプリケーションを配布して、内部サーバーにデプロイしようとしています。現在使用されているように、2 つの配布ユース ケースがあります。
新しいサーバーをインストールする
- ソース配布をインストールする
- DBホストなどを反映するために新しい設定ファイルを作成します。
manage.py -c /path/to/config
でデータベース テーブルを作成するために使用します。database create
- HTTP サーバーを wsgi.py に向ける
既存のサーバーを更新する
- ソース配布の更新
- 現在のアプリ コンテキストを使用
manage.py -c /path/to/server/config migration upgrade
してデータベースをプルアップするために使用します - サーバーは wsgi.py を指し続けます
myapp
このディストリビューションをホイール/パッケージに移動して、企業のイントラネットでの展開を自動化できるようにしたいと考えています。ここで見ているのは、 Flask フレームワークの依存関係と wsgi エントリポイントのみを使用して、パッケージをメイン パッケージに分割したいということです。、、およびディレクトリがmyapp-manage
含まれます。manage.py
tests
migrations
したがって、完璧な世界では、アプリケーションはグローバル構成ファイルを使用してシステムにインストールされ、特定の管理ユーザーが管理パッケージにアクセスしてアップグレードを実行できます。
現在、ディストリビューションを分割し、同じソース ディストリビューションから 2 つの別個のパッケージを作成しようsetup-app.py
としています。setup-manage.py
移行スクリプトと管理スクリプトをフラスコ アプリケーションにパッケージ化するより適切な方法はありますか? 私はドキュメントを掘り下げましたが、flask アプリケーションをパッケージ化する方法は明確ですが、管理スクリプトと移行の配布戦略はあまり明確ではありません。