いつもの通り<project>/<app>/migrations
フォルダを展開用のバージョンコントロールに追加しました。最近では、<project>/env/Lib/site-packages/auditlog/migrations
に独自の移行を作成するdjango-auditlogも使用しています。これらの移行は、自分のものと同じように適用されます。だから、私はVCSにも追加して配備するべきでしょうか?プラグインで作成した移行ではどうすればよいですか?
答えて
いいえ。これらの移行は展開しないでください。一般に、サードパーティの移行は展開しないでください。
理由は簡単です。サードパーティのパッケージは、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.txt
、django-admin createproject myproject
、次に./manage.py migrate
を実行すると、組み込みのすべてのDjango固有のテーブル(つまり、auth
、sessions
、contenttypes
など)でデータベースが「塗りつぶされ、INSTALLED_APPS
で有効になります設定リスト。
唯一デプロイする必要があること(おそらく、.virtualenv
dirの下)をプロジェクト内のいずれかで生きて(などrequirements.txt
、manage.py
、robots.txt
)プロジェクトディレクトリ下のすべてのものではなく、あなたのサードパーティのアプリがあるかであなたのプロジェクトの外に.virtualenv
ディレクトリを分けてください。
あなたの質問に似ているのは、nodejsのnode_modules
です。 (package.json
/requirements.txt
)あなたのプロジェクトが必要とする依存関係が分かっているので、あなたのプロジェクトはゼロから自分自身を "再構成"することができるので、package.json
というのはVCSには決して配備されません。
詳細な回答ありがとうございます。私には意味をなさないようですが、明確に説明してください。なぜ私自身の移行でこれが違うのですか?たぶん、Djangoは展開時にDjangoを常に正しく再構築できると信じていないので、バージョン管理が必要です。なぜ、Djangoのサードパーティ製アプリケーションの移行機能を信頼するのでしょうか? – texnic
あなたのアプリのマイグレーションをバージョン管理することができます(またはそうしない)が、サードパーティのものはバージョン管理しないことがあります。なぜなら、第三者のアプリケーションはあなたの仮想envの中に存在するからです( 'site-packages'ディレクトリの下に)。あなたはこのディレクトリをバージョン管理していません。あなたのプロジェクトを配備したら、 'pip install -r requirements.txt'を実行します(このファイルの下にある各アプリケーションはバージョン番号を持ちます)、すべてのサードパーティパッケージがインストールされます。したがって、各サードパーティがプロジェクトに適切な移行を適用することは確実です。これはあなたのために明確になりますか? –
いいえ:)手続き的には意味がありますが、私は現在どのようにそれを行うのでしょうか。しかし、サードパーティ製のアプリケーションをインストールするときに正しいマイグレーションが生成され、適用されることを私が信じる理由が分かりません。私が正しく理解していれば、自分のマイグレーションをVCS経由で配備するという考えは、 'manage.py makemigrations'を使ってマイグレーションを作成することが保証されていないことを前提にしています。私は想像することができます。管理サイトの移行世代は非常によく定義されており、信頼性があります。第三者のアプリにも同じことが適用されますか?ここの不一致は私には不具合です。 – texnic