2016-04-17 6 views
1

私はうまく動いたHerokuに新しいdjangoアプリを配備しました。しかし、今日私はモデルを少し変更し(新しいフィールドを追加した)、開発データベースの変更を反映するために開発サーバーファイルdb-sqlite3とmigrationsフォルダを削除しました。これはローカルサーバ上で正常に動作しましたが、これをherokuにプッシュすると、django-adminセクションでモデルにアクセスしようとすると500エラーが発生します。モデル更新後のプロダクションサーバで500エラー

私はHerokuのを経由して、いくつかのマイグレーションを実行しようとしたが、私は次のようなエラーメッセージが出ます:私は私の地元の移行フォルダ内に、私は唯一の0001_initial移行を持っているし、何とか他に欠けているが、私は持っていることがわかります

! These migrations are in the database but not on disk: 
    <joins: 0002_auto__add_field_join_ip_address> 
    <joins: 0003_auto__add_unique_join_email> 
    <joins: 0004_auto__add_field_join_ref_id> 
    <joins: 0005_auto__add_unique_join_email_ref_id> 
    <joins: 0006_auto__add_unique_join_ref_id> 
    <joins: 0007_auto__del_unique_join_ref_id> 
    <joins: 0008_auto__del_unique_join_email__add_unique_join_ref_id> 
    <joins: 0009_auto__add_field_join_friend> 
! I'm not trusting myself; either fix this yourself by fiddling 
! with the south_migrationhistory table, or pass --delete-ghost-migrations 
! to South to have it delete ALL of these records (this may not be good). 
(lwc) Daniels-MacBook-Pro:src danielrichter$ heroku run python manage.py migrate --delete-ghost-migrations 

をどのように問題を解決するか考えません。

他の人が同じエラーメッセージに遭遇したのを見たことがありますが、私はDjangoと一般的なコーディングにはかなり新しいので、提案された解答を理解できませんでした。だから私にこれを解決するためのヒントを与えることができる人がいるなら、私はとても感謝しています!

多くの感謝!

答えて

0

データベースでは、メッセージに記載されている移行を適用したと考えられますが、ディスク上のファイルを見つけることはできません。あなたはそれを確認します。おそらくあなたのバージョン管理に何か問題があり、あなたはこれらのファイルを失ったでしょうか?私はあなたがファイルを回復することができるかどうかを調べるつもりです、そして、問題は終わるでしょう。

もしそうでなければ、もう少し難しいです。上記の移行はすでに実行されていますが、ファイルは失われています。また、適用されていない新しい変更を加えました。コード状態は、最後に失われた移行が実行された状態に戻すようにしてください。欠落している移行ファイルを置き換える新しい移行ファイル(python manage.py schemamigration --auto your_app_name)を作成することができます。この移行は0002_something(0001は存在し、0002は次のもの)と呼ばれます。この移行移行後、新しい移行を行うことができます(0003以降)。

サーバー上で、コードのバージョンを更新する前に(0002をまだ持っていない)python manage.py migrate --delete-ghost-migrationsを実行してください。これにより、欠落している移行への参照が削除されます。その後、あなたのバージョンを更新し、新しい0002などの移行を取得することができます。

python manage.py migrate --fake your_app_name 0002を呼び出します。これにより、実際に何も適用せずに、移行が適用されたことがデータベースに通知されます。これは、変更が失われた移行ファイルによって既に適用されているために有効です。

これ以降は、通常の移行を実行できます。python manage.py migrateとなります。

これが役に立ちます。

+0

を多くのありがとうlucas!エラーメッセージは表示されなくなりましたが、今の唯一の問題は、デプロイされたアプリがdjango-adminセクションに入り、変更したモデルにアクセスしようとするたびに500エラーがスローされることです。しかし、開発用サーバではすべてうまく動作しますが、どうすれば解決できますか? – Daniel

+0

DEBUG = Trueを設定していますので、実際のエラーを確認できますか? **編集:**ああ、私は下のポストからそれを参照してください。データベースにフィールドがありません。最後のマイグレーションファイルで、フィールドがデータベースに追加されていることを確認しましたか? –

0

、その後これがあなたの問題である開発 データベース

の変化を反映するために、私の開発サーバーファイルDB-sqlite3のと 移行フォルダを削除、あなたは、任意の移行を削除しないでくださいあなたのデータベースに変更を加えると、django(またはsouth)はそれらの変更のための新しい移行ファイルを作成してから、それらの変更をデータベースに適用するためにmigrationコマンドを実行し、それらの新しい移行ファイルをコミットし、それらをヒーローに渡すので、変更はリモートデータベースにも適用されます。

ワークフローは、このようなものです:

  1. あなたは、いくつかの移行ファイルまたは最初の1
  2. 編集ジャンゴに/削除するフィールド
  3. 移行ファイル(複数可)を作成し、追加することによって、あなたのモデルを(持っています)南なし:

    python manage.py makemigrations

  4. は、ローカルにそれらの変更を適用します。 runnigによってデータベース:

    heroku run python manage.py migrate

  5. あなたのGitのインデックスにHerokuのに変更
  6. プッシュし、それらのモデルの変更と移行ファイルを追加し、移行のコマンドを実行します。

    heroku run python manage.py migrate

+0

ありがとう@ahmed、私はあなたの指示に従っています(ただし、 'makemigrations'の代わりに' schemamigrations myapp --auto'を使用しています)。これで、プロダクションサーバでデバッグモードをtrueに設定して、 'ProgramError at/ column joins_join.wunschradは存在しません LINE 1:選択" joins_join "。" id "、" joins_join "。" email "、" joins_join "..."私が追加したフィールドモデルではありませんが、私はそれを追加することができますどのように地獄の上と、ローカルサーバー上の両方のsyncdbを介して移行からすべてを行った、サーバー上のmodels.pyファイルをチェック – Daniel

+0

私は 'herokuを実行するPython管理.py migrate joins' bashは 'Running migrations for joins: - 何も移行しません。 - 結合のための初期データを読み込みます.'そのため、マイグレーション側から実際のエラーメッセージはありませんが、ローカルではアプリは完全に動作しますが、サーバに問題があり、新しいherokuアプリも作成しました。私はgitのコードに問題があるかもしれないと思っていたので、それをフラッシュしてもう一度押し直す必要がありますが、それは単なる推測です – Daniel

+0

あなたのherokuリポジトリで削除した移行ファイルはありますか?はいの場合は、それらをプルして現在のローカルデータベースを削除し、新しいマイグレーションファイルを追加できます(ステップ5) – ahmed