2012-03-27 17 views
1

問題があります。 私のdjangoプロジェクトには、myappモジュール/アプリケーションがあります。私のプロジェクトは、スキーマの移行を行うために南を使用しています。 localhost上で私は./manage.py schemamigration myapp --initialを実行して、私はmigrateコマンドを実行しました。django + south:migrateコマンドでデータベースにテーブルが作成されない

しかし、本番環境で私がmigrateコマンドを実行すると、これは(myappモデルの)対応するテーブルをデータベースに作成しません。

私がmigrate --listを実行すると、myappが移行しなければならず、すべてがマークされています(*記号付き)。

私は、myappを削除し、最初からそれを再作成することを考えています(対応する移行を使用)。より良い解決策はありますか?

EDIT: 私はmyappを削除してゼロから再作成しようとしました。だから私は、(ローカルホスト上および運用サーバー上の)データベースにmyappというのテーブルを削除しており、すべての後、私は実行しています

schemamigration myapp --initialコマンドコマンド

migrate myappローカルホストにlocalhostを

migrate myapp 0001 --fakeに本番サーバー上で

しかし、サウスはプロダクションサーバーのデータベースにmyappのテーブルを作成し続けません。

+0

なぜ 'migrate ... --fake'を呼びますか? '--fake'はサウスマークのみの移行を成功させるが、実際のDBスキーマには触れない。 – ilvar

答えて

0

テーブルを削除した場合、--fakeを最初に実行してはならない場合は、manage.py syncdbを最初に実行してください。テーブルを持たない場合は、python manage.py migrate myappを実行し、それを実行する必要があります(またはmanage.py syncdb)。 --initialによって作成された最初の移行には、create tableステートメントがあります。

--fakeは、マイグレーションして(データベース変更を行った)、履歴テーブルにそのようにマークすることを明示的に指示します。

+0

それでは、私はmyappのすべてのテーブル(localhost上と本番サーバ上)を削除します。次に 'syncdb'または' schemamigration --initial'を実行します。それから私はプロジェクトを展開します。その後? この方法では、引き続き実動サーバー上にデータベーステーブルを作成しません。 –

+0

@ GiovanniChetelodicoafare、すべてのテーブルが削除されている場合、アプリディレクトリに '0001_initial'移行ファイルがある場合、' migrate'を実行するだけでテーブルが作成されます。 'south_migrationhistory'テーブルが最新のものであることを確認し、リセットするアプリケーションのエントリがないことを確認してください。 –

+0

私はまだmyappのモデルを変更していないので、私はmyappのためにSouthを使用しないことに決めました。実働サーバでsyncdbを実行すると、問題が解決しました。 models.pyを変更した場合、私はmyappのためにSouthを使います。私はマイグレーションをしなければなりません。助けてくれてありがとう。 –

0

私は少し遅れていますが、これと同じ問題がありました。問題は私のmanage.pyが間違った設定ファイルを指していて間違ったDBになっていることです。 manage.pyが正しい設定ファイルを指していて、正しいDBへの移行が行われていることを確認してください。これは、複数のmanage.pyファイルまたは複数の設定ファイルを使用している場合に発生します。

1

DBにテーブルを落として実行しようとしていて、./manage migrate myappを実行しようとすると、DBにドロップされたテーブルは作成されません。 南はあなたのDBのベースに触れないので。

テーブルを再作成する場合。スキーマを以前のバージョンに移行し、最新のものに移行します。それに応じて以下のコードを使用してください。

manage.py migrate myapp 0002 --fake 
manage.py migrate myapp 

注:002は以前のマイグレーションバージョンです。