пытаюсь использовать mod_wsgi в первый раз для своего приложения пирамиды, но я продолжаю получать ImportError: No module named deploy
, когда пытаюсь получить доступ к сайту
in my /etc/apache2/sites-available/domain.com
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
ServerAdmin [email protected]
DocumentRoot /data/app
ErrorLog /data/app/apache_error.log
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
WSGIDaemonProcess pyramid user=www-data group=www-data \
processes=2 threads=4 \
python-path=/data/app/lib/python2.6/site-packages/
WSGIScriptAlias / /data/app/pyramid.wsgi
<Directory /data/app>
WSGIProcessGroup pyramid
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
in /data/app/pyramid.wsgi
venv = '/data/app/bin/activate_this.py'
execfile(venv, dict(__file__=venv))
ALLDIRS = ['/data/app/lib/python2.6/site-packages']
import sys, site, os
site.addsitedir('/data/app/lib/python2.6/site-packages')
sys.path.append('/data/app/app')
os.environ['PYTHON_EGG_CACHE'] = '/data/app/python-eggs'
from pyramid.paster import get_app, setup_logging
ini_path = '/data/app/app/development.ini'
setup_logging(ini_path)
application = get_app(ini_path, 'main')
когда я пытаюсь получить доступ к domain.com
в своем браузере, я получаю сообщение об ошибке The server encountered an internal error or misconfiguration and was unable to complete your request
. Вот распечатка моего журнала ошибок
[Mon Apr 22 20:43:13 2013] [error] test
[Mon Apr 22 20:43:13 2013] [error] mod_wsgi (pid=6795): Target WSGI script '/data/app/pyramid.wsgi' cannot be loaded as Python module.
[Mon Apr 22 20:43:13 2013] [error] mod_wsgi (pid=6795): Exception occurred processing WSGI script '/data/app/pyramid.wsgi'.
[Mon Apr 22 20:43:13 2013] [error] Traceback (most recent call last):
[Mon Apr 22 20:43:13 2013] [error] File "/data/app/pyramid.wsgi", line 30, in <module>
[Mon Apr 22 20:43:13 2013] [error] from pyramid.paster import get_app, setup_logging
[Mon Apr 22 20:43:13 2013] [error] File "/data/app/lib/python2.6/site-packages/pyramid-1.4-py2.6.egg/pyramid/paster.py", line 3, in <module>
[Mon Apr 22 20:43:13 2013] [error] from paste.deploy import (
[Mon Apr 22 20:43:13 2013] [error] ImportError: No module named deploy
Обратите внимание, что test
в первой строке напечатано из моего вручную добавленного print 'test'
в верхней части /data/app/lib/python2.6/site-packages/pyramid-1.4-py2.6.egg/pyramid/paster.py
, чтобы убедиться, что он загружается из файла, который я ожидал...
теперь, если я запущу приложение из сохранения
$ /bin/pserve app/development.ini --reload
приложение запущено успешно, журнал консоли ниже
test
Starting subprocess with file monitor
test
Starting server in PID 9132.
serving on http://0.0.0.0:6543
Я также пытался напрямую зайти в python, чтобы импортировать paster.py, тоже без проблем.
$ cd /data/app/lib/python2.6/site-packages/pyramid-1.4-py2.6.egg/pyramid/
$ /data/app/bin/python
Python 2.6.5 (r265:79063, Oct 1 2012, 22:04:36)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyramid.paster as p
test
>>> print p.__file__
/data/app/lib/python2.6/site-packages/pyramid-1.4-py2.6.egg/pyramid/paster.pyc
>>>
разрешения тоже должны быть в порядке
$ ls /data/app -l
-rw-rw-r-- 1 root www-data 4148 2013-04-22 21:06 apache_error.log
drwxrwsr-x 4 root www-data 4096 2013-04-22 12:05 app
drwxrwsr-x 2 root www-data 4096 2013-04-22 12:04 bin
drwxrwsr-x 2 root www-data 4096 2013-04-22 11:58 include
drwxrwsr-x 3 root www-data 4096 2013-04-22 11:58 lib
-rwxrwxr-x 1 root www-data 893 2013-04-22 12:23 pyramid.wsgi
drwxrwsr-x 2 root www-data 4096 2013-04-22 12:07 python-eggs
что мне не хватает? Спасибо!
Изменить www-data
также является правильным пользователем
$ ps aux | grep apache2
root 2599 0.0 1.4 185200 14552 ? Ss 10:00 0:02 /usr/sbin/apache2 -k start
www-data 9064 0.0 0.8 185664 8940 ? Sl 21:06 0:00 /usr/sbin/apache2 -k start
www-data 9065 0.0 0.8 185664 8940 ? Sl 21:06 0:00 /usr/sbin/apache2 -k start
www-data 9095 0.0 1.1 187292 11388 ? S 21:06 0:00 /usr/sbin/apache2 -k start
www-data 9096 0.0 1.1 187292 11388 ? S 21:06 0:00 /usr/sbin/apache2 -k start
www-data 9097 0.0 1.0 186768 10472 ? S 21:06 0:00 /usr/sbin/apache2 -k start
www-data 9098 0.0 1.0 186768 10472 ? S 21:06 0:00 /usr/sbin/apache2 -k start
www-data 9099 0.0 1.0 186768 10472 ? S 21:06 0:00 /usr/sbin/apache2 -k start
root 9189 0.0 0.0 7624 912 pts/0 S+ 21:42 0:00 grep apache2
Изменить по предложению Грэма, я заменил print 'test'
в paste.py
на
import paste as p
print p.__path__
распечатка при доступе к сайту через apache была /usr/local/lib/python2.6/dist-packages/paste
, а не virtualenv. Я добавил все примеры, которые я мог найти в Интернете, чтобы указать на мой virtualenv в pyramid.wsgi
, а также на pythonpath
в файле конфигурации apache, но, очевидно, я все еще не понимаю это правильно. Где еще попробовать?
httpd.conf
или конфиг, где вы определяете<VirtualHost>
(но делайте это внеVirtualHost
)WSGIPythonHome /path/to/virtualenv
WSGIPythonPath /path/to/virtualenv/lib/python2.6
- person RedBaron   schedule 25.04.2013WSGIPythonHome
иWSGIPythonPath
несколько раз, верно? - person minovsky   schedule 08.05.2013