2013-04-23 1 views
4

пытается использовать mod_wsgi впервые для моей пирамиды приложения, но я постоянно получаю ImportError: No module named deploy когда я пытаюсь получить доступ к сайтуНет модуля с именем Deploy при попытке запуска пирамиды приложения с mod_wsgi

в моих /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> 

в /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, чтобы убедиться, что она загружается из файла, который я ожидал. ..

теперь, если я запустить приложение из pserve

$ /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 

Я также попытался вдаваясь в питона напрямую импортировать 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, но, я уверен, я все еще не понимаю его. Где еще я пытаюсь?

+3

Попробуйте добавить следующую строку в ваш 'httpd.conf' или конф, где вы определяете' ' (Но сделать это за пределами' VirtualHost') 'WSGIPythonHome/путь/к/virtualenv' ' WSGIPythonPath/путь/to/virtualenv/lib/python2.6' – RedBaron

+1

@RedBaron: thx! это сработало, однако есть более фундаментальная проблема. Что делать, если у меня есть более одного приложения (т. Е. Более одного виртуального, это в первую очередь, чтобы настроить виртуальный хостинг в первую очередь)? Я не могу определить 'WSGIPythonHome' и' WSGIPythonPath' несколько раз? – minovsky

+0

Рад помочь ..... У меня была аналогичная проблема, когда я перешел от одного виртуального Env к другому. – RedBaron

ответ

3

решаемые это наконец. Из журнала консоли очевидно, что моя основная установка python в /usr/local/lib имеет установленный модуль paste, который не имеет обработчика deploy.

Комментарий RedBaron для установки WSGIPythonHome работал, но проблема в том, что у меня есть несколько приложений, поэтому я не могу просто указать WSGIPythonHome глобально для виртуального виртуального приложения конкретного приложения.

Во всяком случае, я прошел через mod_wsgi документов на virtualenv снова (https://code.google.com/p/modwsgi/wiki/VirtualEnvironments#Baseline_Environment) и увидел, что WSGIPythonHome должен быть направлен на «девственную среду». буквально

$ virtualenv --no-site-packages BASELINE 

, а затем указывая WSGIPythonHome

WSGIPythonHome /usr/local/pythonenv/BASELINE 

и точки WSGIDaemonProcess к конкретным virtualenv моего приложения (который я уже сделал в начале)

Урок: Уделите больше внимания к docs ...


Наконец, мой pyramid.wsgi может быть значительно упрощены только следующие

import os 
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') 
1

Ошибка указывает на то, что пакет PasteDeploy не установлен.

+0

Спасибо за ваш ответ. Если это так, то как это объяснить, почему успешный запуск «pserve», который загружает * тот же скрипт? тем не менее, я попробовал '$ bin/pip install pastedploy' и получил' Требование уже выполнено (используйте --upgrade для обновления): pastedeploy в ./lib/python2.6/site-packages/PasteDeploy-1.5.0-py2.6 .egg Очистка ... ' – minovsky

+2

Напишите программу WSGI для приветствия, которая импортирует« вставку »и выдает« paste .__ file__ ». Это то, от чего вы ожидаете? –

+0

еще раз спасибо! Я заменил «print test» на «import paste» как p print p .__ path__'. не сделал так, что такая простая проверка ускользнула от меня ... но на самом деле apache не получает правильную «вставку», распечатка была «/ usr/local/lib/python2.6/dist-packages/paste'' I добавили все примеры, чтобы указать на мой virtualenv в 'pyramid.wsgi', а также на' pythonpath' в файле конфигурации apache ... где я делаю это неправильно? – minovsky

2

В моем случае переустановка PasteDeploy в виртуальной среде фиксированной проблема, не знаю, почему, хотя.

 Смежные вопросы

  • Нет связанных вопросов^_^