Django South --fakeオプションの使い道がようやくわかった
SouthでDBのマイグレートを行う際、--fakeオプションを付けると実際のテーブルに変更を
行わず、マイグレート履歴のみが更新されます。
具体的には、Djangoで指定したバックエンドDBに作成されるsouth_migrationhistoryテーブル
にマイグレート履歴のレコード0001_initial~000X_hogehogeがinsertされます。
このオプションが使えるケース(多分使い道の一つ)
- 新しくチームに加わった人のために既存のDjangoプロジェクトを構築してあげよう
- マイグレート実行
- アプリのモデル変更がやたら多い + ForeignKeyが入り乱れておりマイグレートエラー
- もうだめぽ
解決策
- エラーが出たアプリのテーブルを全drop(制約系ももちろん全消し)
- south_migrationhistoryテーブルのアプリのマイグレーション履歴をdelete
- Django内 フォルダツリ ーでアプリのフォルダに存在する、migrationsフォルダ内の マイグレーションファイル 000X_XXXX.pyを全て削除します。削除したマイグレーションファイルは後で戻すのでgitやらsubversionやらで管理していない場合は適当な場所に退避させておきましょう。
- schamamigrationコマンドを--initialオプション付きで実行します。これにより、migrationsフォルダに0001_initial.pyが作成されます。
- マイグレートします。これはまずエラーにならず成功します。
- 3で削除したマイグレーションファイルを復元します。(0001_initial.pyも元の内容に復元)
- --fake オプション付きでマイグレート実行します。
これにより、エラーを回避しつつマイグレート履歴も合わせることができます。
0001_initial.pyのファイル名だけは固定なことを利用した小技です。
環境構築時のマイグレーションでエラーになるとモチベーションがガタ落ちするのでさくっと解決しましょう♪
msgpack-pythonをpipでインストールしようとするとエラーになってもがんばる!
心機一転の初回は最近ハマりかけたエラーについて書いていきます。
OSはMacOS-Xです。
msgpack-pythonはシリアライズ用のライブラリとしてなかなかに優秀です。
KVSとかと組み合わせて使うといいんじゃないかな?深堀りすると知識の浅さが露呈するので避けるけど。
最近新しい環境を立てる機会があったのでpythonianとしてはもはや定番のvirtualenvで環境をせっせと構築していました。タイトルにあるようにライブラリ管理はpipです。
そして、件の msgpack-pythonの番になったので他と同じように、
$ pip install msgpack-python
と打ったところ、
/Users/.pyvirtualenvs/hoge/build/msgpack-python/setup.py:51: Warning: 'as' will become a reserved keyword in Python 2.6
Traceback (most recent call last):
File "
except Exception as e:
^
SyntaxError: invalid syntax
Complete output from command python setup.py egg_info:
/Users/.pyvirtualenvs/hoge/build/msgpack-python/setup.py:51: Warning: 'as' will become a reserved keyword in Python 2.6
Traceback (most recent call last):
File "
except Exception as e:
^
SyntaxError: invalid syntax
と見慣れないエラーが…
※パスは適当に脚色してますよ。察してね。
見慣れないと言っても一目瞭然でpython2.6文法で引っかかってます。
なんせこっちはpython2.5だからな!
2.6より上にすればいいのですが、2.5でなければならないケースもあるでしょう。
2012年年末くらいまで問題なかったのに…
というわけで、ご丁寧にエラーのソースまで出てるので
/Users/.pyvirtualenvs/hoge/build/msgpack-python/setup.py
を編集します。
51行目の、
except Exception as e:
を
except Exception, e:
とでもしてやればOKですね。
保存して再インストールします。
あ、またエラー出た。でも
Successfully installed msgpack-python
ってなった。pip freeze しても入ってる。
実際に使ってみてもちゃんと使える。
すっきりしないけど、とりあえず、いっか~
これがいつか致命傷にならないといいな・・・