Пинакс (13, «Отказано в доступе») - PullRequest
0 голосов
/ 17 февраля 2010

Я новичок, но я прекрасно справился со своим приложением, используя python manage.py runserver, но когда я перенес его в Apache + mod_wsgi, я продолжаю получать эту ошибку. Отладочные сообщения не сильно помогают. Вот скриншот всего изображения отладки: http://img694.imageshack.us/img694/6723/screenshotfb.png

Вот дамп моего файла http.conf.

WWSGIDaemonProcess cloud-tester python-path=/home/ubuntu/.virtualenvs/pinax-env/lib/python2.6/site-packages
WSGIProcessGroup cloud-tester

WSGIScriptAlias /cloudrunner /home/ubuntu/projects/cloudfly/deploy/pinax.wsgi
<Directory /home/ubuntu/projects/cloudfly/deploy>
    Order deny,allow
    Allow from all
</Directory>

Содержимое pinax.wsgi - это то, что поставляется с Pinax. Я ничего не менял.

Я создал образец "basic_project", и это прекрасно работает. Это не так.

Заранее спасибо! Любой совет, что мне делать?

Ответы [ 2 ]

4 голосов
/ 17 февраля 2010

В Apache / mod_wsgi ваш код будет работать как пользователь Apache и обычно не будет иметь прав доступа для записи в каталоги, которые есть у вас как у пользователя. Читайте:

http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Access_Rights_Of_Apache_User

Самый простой способ запустить процесс - запустить процесс демона под тем же пользователем, что и при запуске кода вручную. Для этого используйте опции 'user / group' для WSGIDaemonProcess. Читайте:

http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcess

Еще одна проблема может заключаться в том, что вы использовали относительные пути в своем коде. Это не будет работать под Apache, так как текущий рабочий каталог может быть чем угодно. Вы действительно должны всегда использовать абсолютные пути или, по крайней мере, вычислять их относительно os.path.dirname () из __file__ для файла кода, в котором это делается.

Способ обойти это, если вы действительно не хотите иметь с этим дело, - использовать опцию 'home' для WSGIDaemonProcess, чтобы установить текущий рабочий каталог процесса демона в тот же каталог, где вы вручную запускаете сервер. См. Ту же документацию для WSGIDaemonProcess, на которую есть ссылка выше.

0 голосов
/ 26 января 2011

Вы входите в систему как root, когда используете 'python manage.py runserver', поэтому ему разрешено писать в этот директор, но когда apache запускает ваш wsgi-скрипт, он будет находиться под своим именем пользователя, которому не разрешено писать в каталог, в котором находятся ваши скрипты Python.

Если вы используете сервер Ubuntu, у меня возникла та же проблема. Я исправил это с помощью

chown www-data: www-data -R media

Я храню все свои скрипты py в / var / pyproj /. Папка мультимедиа будет находиться в / var / pyproj // pysrc (мой директор по установке pinax) / site_media /

Я храню свой wsgi-скрипт, nginx conf и vhost.conf в /var/pyproj//server.

Желаю удачи, пользователь django. Надеюсь, это поможет.

...