2012-08-16 1 views
7

django-southを使用すると、前回の移行をすべて適用せずに最後の最新の設定にしかテーブルを設定できませんか?django-activity-streamデータベーステーブルをインストールできません

サードパーティのツール(django-activity-stream)を使用することに興味がありますが、多少の未知の理由(特定のフィールドに関するMySQLの問題など)のために、すべての移行を実行することに問題があります。エラー

_mysql_exceptions.OperationalError: (1170, "BLOB/TEXT column 'object_id' used in key specification without a key length") " I strongly suspect that avoiding the migrations and going straight to the current schema will avoid this.

後方に移行する機能は、今現在のスキーマに私たちを取得する唯一の必要性を必要とされていない、と私はこれに対処するためのパッケージをハックする必要はありません。私はコマンドを確立するように見えないか、これが可能であるかどうか?

設定:

南0.7.6、Djangoの1.3.xのは、MySQL 5.5.x、ジャンゴ・アクティビティ・ストリーム0.4.4

+0

マイグレーションを実行しているときにdjango 1.4で同じエラーが発生しています –

+1

私が間違っていると大変申し訳ありませんが、テストする時間がないので、なぜmanage.py syncdb --allを実行して管理できません。 py移行する - フェイク? –

+0

注:上記の作業の前に、以前の作業中に間違った状態で作成された場合は、データベースからアプリケーションのテーブルを手動で削除する必要があります。 –

答えて

4

このエラーは、actstreamが汎用外部キーを処理する方法のために発生しています。この問題は、 長さが指定されていないテキストフィールドが表示されるため、MySqlで発生します。

このエラーは、移行0003をノーオペレーションにすることで修正できます。

変更の移行actstreamで0003_text_field_ids0004_char_field_idsで次のようなもの:

0003_text_field_ids.py:

  1. def forwards(self, orm)def backwards(self, orm)ですべてを削除し、ちょうど両方でpassを書きます。
  2. TextFieldからPositiveIntegerFieldに変更してください。

0004_char_field_ids.py:def backwards(self, orm)

  1. 、すべてdb.altercolumns()PositiveIntegerFieldに変更TextField

これは、移行0003 NOOPが転送のためのパスを使用して行い、後方とジェネリック外国キーのモデルの定義を使用PositiveIntegerFieldsしますので、移行0001がそれらを残したとして、彼らは同じ状態に保たれています。これを行うと、移行0004はPositiveIntegerFieldsからvarCharsに拾い上げることができます。その後、修正によりmigration 0004が変更され、逆方向移行はTextFieldsではなくPositiveIntegerFieldsに変更されます。

これはうまくいけば問題を解決するはずです。

2

私は問題がマイグレーションによって引き起こされると思ういけない、でもsyncdb意志あなたに同じ結果を与える。

MySQLはBLOBまたはTEXT列の最初のN個の文字のみをインデックスできるため、エラーが発生しています。したがって、主キーまたは索引として作成しようとしているTEXTまたはBLOBのフィールド/列タイプが必要です。

長さの値がでない完全なBLOBまたはTEXTを使用すると、MySQLは可変で動的なサイズのため、カラムの一意性を保証できません。したがって、インデックスとしてBLOB型またはTEXT型を使用する場合、MySQLのキー長を決定できるように、Nの値を指定する必要があります。

この問題を修正し、移行を適用しようとするとうまくいくはずです。 はい、マイグレーションを適用して古いものをスキップすることはできますが、南をどのように使用するのではなく、これを実行しないことをお勧めします。

希望は少しクリアしました。

関連する問題