2017-04-01 14 views
0

いつもの通り<project>/<app>/migrationsフォルダを展開用のバージョンコントロールに追加しました。最近では、<project>/env/Lib/site-packages/auditlog/migrationsに独自の移行を作成するdjango-auditlogも使用しています。これらの移行は、自分のものと同じように適用されます。だから、私はVCSにも追加して配備するべきでしょうか?プラグインで作成した移行ではどうすればよいですか?

答えて

0

いいえ。これらの移行は展開しないでください。一般に、サードパーティの移行は展開しないでください。

理由は簡単です。サードパーティのパッケージは、migrationsディレクトリ内に初期移行されています。サードパーティのパッケージに依存する移行を作成するたびに、この移行はアプリのmigrationsディレクトリにあります(パッケージ1内にはありません)。

はそう、あなたが最初にあなたのコードを展開し、サーバー上pip install -r requirements.txtを実行すると、すべてのサードパーティ製のパッケージがインストールされ、あなたが./manage.py migrateを行うときにDjangoはあなたのINSTALLED_APPSを見て、このリストのそれぞれについて、すべてのマイグレーションを実行します。

Djangoと同じように、サードパーティのパッケージでも同じことが起こります。 requirements.txtファイルにはDjango==1.10.6しか含まれていないとします。これをサーバーにデプロイしてpip install -r requirements.txtdjango-admin createproject myproject、次に./manage.py migrateを実行すると、組み込みのすべてのDjango固有のテーブル(つまり、authsessionscontenttypesなど)でデータベースが「塗りつぶされ、INSTALLED_APPSで有効になります設定リスト。

唯一デプロイする必要があること(おそらく、.virtualenv dirの下)をプロジェクト内のいずれかで生きて(などrequirements.txtmanage.pyrobots.txt)プロジェクトディレクトリ下のすべてのものではなく、あなたのサードパーティのアプリがあるかであなたのプロジェクトの外に.virtualenvディレクトリを分けてください。

あなたの質問に似ているのは、nodejsのnode_modulesです。 (package.json/requirements.txt)あなたのプロジェクトが必要とする依存関係が分かっているので、あなたのプロジェクトはゼロから自分自身を "再構成"することができるので、package.jsonというのはVCSには決して配備されません。

+0

詳細な回答ありがとうございます。私には意味をなさないようですが、明確に説明してください。なぜ私自身の移行でこれが違うのですか?たぶん、Djangoは展開時にDjangoを常に正しく再構築できると信じていないので、バージョン管理が必要です。なぜ、Djangoのサードパーティ製アプリケーションの移行機能を信頼するのでしょうか? – texnic

+0

あなたのアプリのマイグレーションをバージョン管理することができます(またはそうしない)が、サードパーティのものはバージョン管理しないことがあります。なぜなら、第三者のアプリケーションはあなたの仮想envの中に存在するからです( 'site-packages'ディレクトリの下に)。あなたはこのディレクトリをバージョン管理していません。あなたのプロジェクトを配備したら、 'pip install -r requirements.txt'を実行します(このファイルの下にある各アプリケーションはバージョン番号を持ちます)、すべてのサードパーティパッケージがインストールされます。したがって、各サードパーティがプロジェクトに適切な移行を適用することは確実です。これはあなたのために明確になりますか? –

+0

いいえ:)手続き的には意味がありますが、私は現在どのようにそれを行うのでしょうか。しかし、サードパーティ製のアプリケーションをインストールするときに正しいマイグレーションが生成され、適用されることを私が信じる理由が分かりません。私が正しく理解していれば、自分のマイグレーションをVCS経由で配備するという考えは、 'manage.py makemigrations'を使ってマイグレーションを作成することが保証されていないことを前提にしています。私は想像することができます。管理サイトの移行世代は非常によく定義されており、信頼性があります。第三者のアプリにも同じことが適用されますか?ここの不一致は私には不具合です。 – texnic