0

flaskを使用してアプリケーションを設計していflask-sqlalchemyます。モデルの変更に合わせてデータベースの移行を制御するために、flask-migratealembic をラップしてflask-script管理コンテキスト内で使用しています。

次の目標を達成するためにパッケージ配布を分割する方法を決定しようとしています

  1. メイン アプリケーション パッケージの依存関係の最小セット
  2. メインのアプリケーション モジュールに応じて、おそらくセカンダリ パッケージを使用して、移行と展開のための管理スクリプトとテスト データの配布を許可する

プロジェクトの構造は次のとおりです。

/
 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-migrateMigratemanage.pyMigrate.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_datatests/python manage.py migration init/revision/migrate/...flask-migratealembic

このアプリケーションを配布して、内部サーバーにデプロイしようとしています。現在使用されているように、2 つの配布ユース ケースがあります。

  1. 新しいサーバーをインストールする

    • ソース配布をインストールする
    • DBホストなどを反映するために新しい設定ファイルを作成します。
    • manage.py -c /path/to/configでデータベース テーブルを作成するために使用します。database create
    • HTTP サーバーを wsgi.py に向ける
  2. 既存のサーバーを更新する

    • ソース配布の更新
    • 現在のアプリ コンテキストを使用manage.py -c /path/to/server/config migration upgradeしてデータベースをプルアップするために使用します
    • サーバーは wsgi.py を指し続けます

myappこのディストリビューションをホイール/パッケージに移動して、企業のイントラネットでの展開を自動化できるようにしたいと考えています。ここで見ているのは、 Flask フレームワークの依存関係と wsgi エントリポイントのみを使用して、パッケージをメイン パッケージに分割したいということです。、、およびディレクトリがmyapp-manage含まれます。manage.pytestsmigrations

したがって、完璧な世界では、アプリケーションはグローバル構成ファイルを使用してシステムにインストールされ、特定の管理ユーザーが管理パッケージにアクセスしてアップグレードを実行できます。

現在、ディストリビューションを分割し、同じソース ディストリビューションから 2 つの別個のパッケージを作成しようsetup-app.pyとしています。setup-manage.py移行スクリプトと管理スクリプトをフラスコ アプリケーションにパッケージ化するより適切な方法はありますか? 私はドキュメントを掘り下げましたが、flask アプリケーションをパッケージ化する方法は明確ですが、管理スクリプトと移行の配布戦略はあまり明確ではありません。

4

0 に答える 0