0

次のようなURL(実際のファイルではなくビューを指す)を除いて、すべてのURLはApacheとdjangorunserverの両方で正常に機能します。

foo.js

urls.py:

url(r'^foo.js$', 'myapp.views.foo', name="foo"),

views.py:

def foo(request):
    return HttpResponse("foo")

開発サーバーでこのURLを呼び出すと、私が出力されますfoo

mod_wsgiを使用したApacheで、同じURLを使用し404

wsgi confファイル(本当に基本的):

import os
import sys, logging

sys.stdout = sys.stderr

path = '/var/www/vhosts'
if path not in sys.path:
   sys.path.insert(0, path)
   sys.path.insert(0, path + '/myapp')

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

従来のURL/foo/は期待どおりに機能します。

問題はどこだ?それは私が知らない/認識しないapacheの振る舞いですか?Djangoルーティングですか?

編集

apache confを追加した後(おそらく明白なヒントに感謝します)、*。js上のそれらのAliasMatchが問題だと思います..私はそれらを完全に忘れました!

<VirtualHost *:80>
        DocumentRoot "/var/www/vhosts/myapp"
        ServerName www.myapp.local


    Alias /robots.txt  /var/www/vhosts/myapp/public/static/robots.txt
    Alias /favicon.ico /var/www/vhosts/myapp/public/static/favicon.ico

    AliasMatch ^/([^/]*\.css) /var/www/vhosts/myapp/public/static/$1
    AliasMatch ^/([^/]*\.js)  /var/www/vhosts/myapp/public/static/$1


    Alias /media/  /var/www/vhosts/myapp/public/media/
    Alias /static/ /var/www/vhosts/myapp/public/static/

    <Directory /var/www/vhosts/myapp>
                Order allow,deny
                Allow from all
        </Directory>

        WSGIDaemonProcess myapp.djangoserver processes=2 threads=15 display-name=%{GROUP}
        WSGIProcessGroup myapp.djangoserver

        WSGIScriptAlias / /var/www/vhosts/myapp/apache/django.wsgi
LogLevel info
</VirtualHost>
4

1 に答える 1

1

それぞれ、MEDIA_ROOTおよびSTATIC_ROOTで設定されたディレクトリを提供するようにApacheを設定しましたか?開発では、Djangoが静的メディアを提供するため、完全なWebサーバースタックは必要ありませんが、本番環境では、ファイルを提供するのはユーザー次第です。MEDIA_URLSTATIC_URL

アップデート

行を削除するだけAliasMatchです。Alias/media/と/static/の両方にディレクティブをすでに設定している場合は、これらは不要です。すべての静的リソースは、これら2つのディレクトリのいずれかにあります。

また、を実行することを忘れないでくださいpython manage.py collectstatic。そうしないと、として指定されたディレクトリはSTATIC_ROOT空になり、明らかに404になります。

于 2012-05-16T20:28:26.443 に答える