2016-08-15 7 views
-1

Ubuntuで実行されるDjango 1.9駆動のWebサイトを持っていて、私のPCからローカルにプロジェクトのクローンを実行すると、 127.0.0.1:8000 URLを使用しています。このような場合のエラーの特定には非常に時間がかかります。特に、ウェブサイトがすでに部分的に使用されている場合は、大規模なプロジェクトをデバッグするためのベストプラクティスは何か疑問です。 できるだけ具体的にするために、私は何がうまくいかないのかを段階的に説明します。DjangoのWebサイトでは、ローカルで実行しても表示されないエラーが発生する

ステップ1.私は10.8.0.1:8000/show_students/

ステップ2.ページ上で何らかのアクションを実行し、たとえば、いくつかのURLを入力し、学生のプロファイルを保存、と言います。操作が正常に終了せず、エラーが発生します。

手順3.リモートサーバー上のプロジェクトディレクトリを自分のPCのローカルディレクトリにコピーしてコピーし、CLONEを実行します。私はエラーが発生しないことを確認します。

実際の例、

task_email_recipients = TaskEmailRecipients.objects.get(task_type = 
task_instance.type, legal_entity_own = legal_entity_own_instance) 

この行は、私はから同じビューを実行する場合 (はい、私は何を省略していなかった。それは「というフィールド」の後に空の文字列である)LegalEntityOwn has no field namedという例外がスローされます127.0.0.1、エラーは消えます。 私の行動は何でしょうか? これは、私はEclipseを使用しています。私は自分のローカルPCにMS Windows 10を持っています。

総括、私の目標は、のために10.8.0.1

UPDATEからプロジェクトの実行をデバッグすることである - 私はいつもこの警告を無視してきましたが、プロジェクトを実行するとき、それは警告

を与えるポールBecotteさんのコメント

適用されていない移行があります。アプリが適用されるまで まで正しく動作しないことがあります。それらを適用するために 'python manage.py migrate'を実行してください。

+2

あなたはA. A.ソースコントロールを使用していますか? B.移行を使用してデータベースのスキーマを制御しますか? C.自動化された方法であなたのアプリをデプロイしますか?このような問題は通常、配備されたサーバーをめちゃくちゃにして忘れてしまって、実際に両方の場所で実際に実行されているものをよりよく制御することが通常これらの問題を解決します。 –

+0

Paul、更新された質問を参照してください。両方のポイント(A.とB.)を明確にしてください。 –

答えて

1

ここで、いくつかの概念を説明します。

A.ソースコントロール(Git)では、ソースコードのすべての変更を追跡できます。これは非常に重要なので、ファイルを前後にコピーするようなことをせずに、デプロイされたサーバーと同じバージョンのコードを開発マシン上で実行していると自信を持って感じることができます。 git statusのようなコマンドを使用すると、何かを変更した場合に表示され、2つの環境の違いについてヒントを得ることができます。 gitを使用していない場合は、すぐに開始する必要があります!

B.移行は、データベースのスキーマのソース管理に似ています。 MysqlやPostgresのようなSQLデータベースは固定スキーマを持っています。THESEという名前を持つ多くのテーブルを持っていて、テーブルAには名前とIDという3つのカラムがあります。移行は、データベースにログインしてCREATE TABLE A ...を実行する代わりに、必要なコマンドが含まれている移行ファイルを作成してデータベースにバージョン番号をスタンプすることで、これらのスキーマの内容を把握できるように設計されています。次に、それらのコマンドファイルを実行して、データベースが同じバージョンにある場合、それらが同じ構造を持っていることを知っています(ローカルデータベースを配備されたものと一致させることができます)。 Djangoには、便利な移行システムが組み込まれています。manage.py migrateは、すべての移行ファイルを現在のデータベースに適用するコマンドです。リストされたエラーメッセージが表示される場合は、データベーススキーマがモデルファイルと同期していないため、アプリが正常に動作する可能性はほとんどありません。非常に限られた説明に基づいて、ローカルデータベースには存在するが、本番データベースには存在しないモデルにフィールドを追加しました。

C.私は展開スクリプトについて言及しました。これは、コードをリモートサーバー上で実行するために実行できる単一のコマンドであり、毎回同じように発生することが確実です。この場合、それは何かのように...あなたは何が起こっているか知っている、とあなたはエラーベクトルとして誤ってスキップのステップを除外することができるようにそのようなスクリプトを設定

ssh production 
git pull 
python manage.py migrate 
uwsgi 

かもしれません。

関連する問題