私はDjangoには自信がありますが、ほとんどの場合、最近までに生成されたマイグレーションに依存していました。私は小さなカスタムマイグレーションを書いていました。そして、CIがタイムアウトについて不満を持ち始めた直後に、デプロイメント中にDjangoからの移行に関係していました。Djangoのマイグレーションが中止されました
まず、私はこの問題を解決できましたが、修復したことがあれば何をしたのか分かりません。この問題は、特定の移行のために入力したカスタムコードに関連しているようです。ここで私は知っているものだ:
- 最初は、すべてが大丈夫だったが、移行は、私のカスタムコードを追加した後に(比較的)を実行する本当に長い時間を取り始めました。時間は約10秒です。
- 時々動作します。すなわち、コマンドラインから10回マイグレーションを実行すると、時々動作し、失敗することがあります。まず
[[email protected] myapp]$ ./manage.py migrate Operations to perform: Apply all migrations: myapp1, myapp2, myapp3, myapp4 Running migrations: Killed
- 私は前に2つのフィールド間のコピーデータPythonの機能を実行するために
RunPython
を使用していますので、それが思った次のように出力が(アプリ名が出て編集した)である
フィールドの1つを削除します。このドキュメントでは、PostgreSQLの使用を推奨していませんが、これを行うにはより良い方法がありますか?
- 私は前に2つのフィールド間のコピーデータPythonの機能を実行するために
- ここでのビジネスシナリオでは、一連のオプション(CharField
options
)に切り替えるために必要なブール値フィールドがあることです。ブール値がtrueであるかどうかをチェックし、文字フィールドに正しい値を設定します。私はこれを2回しました。初めての作業は結局終わりましたが、まだ別のデータベースでテストしていません。
これは、移行(アプリ名が出て編集した)である:
from __future__ import unicode_literals
from django.db import migrations
def fix_consulting(apps, schema_editor):
my_model = apps.get_model("myapp", "MyModel")
for m in my_model._default_manager.all():
if m.consulting:
m.detail = "CONSLT"
m.save()
class Migration(migrations.Migration):
dependencies = [
('myapp', '0024_auto_20160117_1113'),
]
operations = [
migrations.RunPython(fix_consulting,atomic=False),
]
私の考え:
たぶん私はここに書いているコードは実行に時間がかかりすぎますか?データベースには100個未満のモデルがあるので、なぜ
fix_consulting
関数が長らくかかるのか分かりません。fix_consulting
の先頭にprintステートメントを追加すると、それらは時々のみ実行され、他の時間は強制終了されます。現状では、私はそれを6-8回を走ったのだが、毎回殺されているが、異なる点で
その他の情報: - Djangoの1.9 を使用して - PostgreSQLの9.4.4 を使用する - エラー主にCentOS上で発生しますが、OSXでも発生します
(ということは、スプライシングまたはフィルタリングによっても)常にそれが実際に必要とされていることだけにDBから返されたものを絞り込むしようとしているお勧めします'all'によって取り出されたデータを保存することができるので、ループ全体を' my_model._default_manager.filter(consulting = True).update(detail = "CONSLT") 'に変更すると、問題が解決する可能性があります。私が正しいなら、これを答えてくれることを幸せにしてください – Sayse
私はこれを撃つでしょう!これは、かなり少量のメモリを持つサーバーです。 –
あなたは正しいです!このエラーは2倍でした。私があなたが提供したコードに変更すると、それは実際に私にスタックトレースを与えたので非常に簡単に解決された別のエラーを明らかにしました。ありがとうございました!先に進んで答えを加えてください。 –