Django で Web アプリが Internal Server Error

3,678 views
Skip to first unread message

Hajime Fujita

unread,
Sep 9, 2010, 8:57:09 AM9/9/10
to django-ja
藤田です。
たびたびお世話になります。

皆さまのご協力を得て、Python + Django で実装したはじめての Web アプリが
ようやく完成したので、いざサーバへデプロイ!…と鼻息荒くソースをアップロードしたものの、
Internal Server エラーの嵐に参っております…。

<動作環境>
- サーバ: さくらレンタルサーバ(共用)
- Python: 2.6.2
- Django: 1.1.1
- DB: 3.6.14.2

<状況>
- ローカルの開発サーバ上では、作成した Web アプリは問題なく動作している。
- 端末から動作確認用のテストプロジェクトを startproject し、
http://username.sakura.ne.jp/django.cgi/testproject にアクセスすると、
「It worked」が表示される → Django は正常に動作している
- 端末から Web アプリ用のプロジェクトを startproject し、そのディレクトリへ FTP 経由で
ソースコードを上書きして http://username.sakura.ne.jp/django.cgi/projectname にアクセ
スすると、
Internal Server Error の表示が出る(Django が吐く整ったエラー画面ではなく、Apache が
出す貧相な500エラー画面)。
- syncdb はきちんと通る → データベースに問題はない?
- どうやら、urls.py から自前で作ったソースを import するとエラーが出るらしい

→ urls.py の状況
from django.conf.urls.defaults import *
from django.contrib import admin
from myapp import myclass ← #### ここ(自作ソースのimport)と

admin.autodiscover() ← ######## ここをコメントアウトすると「It worked」が表示されるが、
いずれか一方のコメントを外すと 500 エラーが返る。
urlpatterns = patterns('',
(r'^admin/', include(admin.site.urls)),
...
)

<困っていること>
- 開発サーバではきちんと動作するのに、サーバ上では問答無用の Internal Server Error が出る
→ Apache がエラーを返しているだけで、何が悪くてエラーとなるのかが分からない。

…といった感じで、お詳しい方、似たような問題に苦しまれた方、等々、
何かお分かりになることがありましたらアドバイスを頂きたく、どうぞよろしくお願い致します。

tokibito

unread,
Sep 11, 2010, 4:17:36 AM9/11/10
to django-ja
岡野です。

Apacheの500エラーが出ているのであれば、Apacheのエラーログにトレースバックの内容が出ていないか確認してみてください。
django.cgiはどのような内容ですか?
プロジェクトディレクトリのパスがsys.pathに入ってなくてインポートエラーになっていたりしませんか?

Hajime Fujita

unread,
Sep 15, 2010, 8:41:07 AM9/15/10
to django-ja
藤田です。

Apache のエラーログを見たところ、「テンプレートがない」とかいうよく分からないエラーが出ていたので、
よくよく調べてみると…岡野様ご指摘の通り、プロジェクトディレクトリがパスに含まれていませんでした…。
django.cgi で sys.path にパスを追加すると、Apache のエラーではなく、django のエラーを見ることができまし
た。
アドバイス、ありがとうございました…(つまらないミスで煩わせて申し訳ありません)

しかし、やはりローカルサーバとデプロイ用本番サーバではアプリの挙動が異なるようで戸惑っております。
というのも、例えば urls.py で、

urlpatterns = patterns( '',
url( r'^$', views.top_page ),
)

と書くと、ローカルサーバでは http://localhost:8000/ にマッチしてページが表示されますが、
これと同じものをアップして、 http://username.sakura.ne.jp/django.cgi/appname/ にアクセスして
も、

Using the URLconf defined in appname.urls, Django tried these URL
patterns, in this order:
1. ^$
The current URL, appname/, didn't match any of these.

と、パターンにマッチしない旨のエラーが返ってきてしまいます。
# url( r'', views.top_page ) と exact に指定すると普通にマッチして表示されますが…。
これは、django.cgi が原因でしょうか?
django.cgi は
http://code.djangoproject.com/attachment/ticket/2407/django.cgi
これとほとんど同じものです。

どうぞよろしくお願い致します。

tokibito

unread,
Sep 16, 2010, 9:27:24 AM9/16/10
to django-ja
岡野です。

>/django.cgi/appname/
このパスによるアクセスだと、 「/appname/」 がdjango側に渡るので、

>The current URL, appname/, didn't match any of these.
このようになるのは、「/」にしかマッチしないurlpatternsなので、正常ですね。

http://username.sakura.ne.jp/django.cgi/
このURLでアクセスしてみてください。views.top_pageの結果が表示されると思います。

django.cgi部分を省略したようなURL(http://username.sakura.ne.jp/)で動作させたい場合は、
WebサーバがApacheであればrewriteの設定を行うなどが必要です。

On 9月15日, 午後9:41, Hajime Fujita <hajime.fuj...@gmail.com> wrote:
> 藤田です。
>
> Apache のエラーログを見たところ、「テンプレートがない」とかいうよく分からないエラーが出ていたので、
> よくよく調べてみると…岡野様ご指摘の通り、プロジェクトディレクトリがパスに含まれていませんでした…。
> django.cgi で sys.path にパスを追加すると、Apache のエラーではなく、django のエラーを見ることができまし
> た。
> アドバイス、ありがとうございました…(つまらないミスで煩わせて申し訳ありません)
>
> しかし、やはりローカルサーバとデプロイ用本番サーバではアプリの挙動が異なるようで戸惑っております。
> というのも、例えば urls.py で、
>
> urlpatterns = patterns( '',
> url( r'^$', views.top_page ),
> )
>
> と書くと、ローカルサーバではhttp://localhost:8000/にマッチしてページが表示されますが、
> これと同じものをアップして、http://username.sakura.ne.jp/django.cgi/appname/にアクセスして
> も、
>
> Using the URLconf defined in appname.urls, Django tried these URL
> patterns, in this order:
> 1. ^$
> The current URL, appname/, didn't match any of these.
>
> と、パターンにマッチしない旨のエラーが返ってきてしまいます。
> # url( r'', views.top_page ) と exact に指定すると普通にマッチして表示されますが…。
> これは、django.cgi が原因でしょうか?
> django.cgi はhttp://code.djangoproject.com/attachment/ticket/2407/django.cgi

Hajime Fujita

unread,
Sep 16, 2010, 10:37:48 AM9/16/10
to django-ja
藤田です。

初心者すぎる勘違いのハマり方でお恥ずかしいです…。

確かにアクセスできました!そして、ローカルサーバと挙動が一致することが確認できました!
ついでに、rewrite によるアクセスができることも確認できました。

ご丁寧にアドバイスくださいまして、ありがとうございました。
また、ガリガリいじってみます。
Reply all
Reply to author
Forward
0 new messages