None of the modules will expand when trying to run an application with a pyramid with mod_wsgi

trying for the first time to use mod_wsgi for my pyramid application, but I keep getting ImportError: No module named deploy when trying to access the site

in my /etc/apache2/sites-available/domain.com

 <VirtualHost *:80> ServerName domain.com ServerAlias www.domain.com ServerAdmin admin@domain.com 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') 

when I try to access domain.com in my browser, I get the error The server encountered an internal error or misconfiguration and was unable to complete your request . Here's a printout of the error log

 [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 

Note that printing test in the first line of my manually added print 'test' at the top of /data/app/lib/python2.6/site-packages/pyramid-1.4-py2.6.egg/pyramid/paster.py to make sure it loads from the expected file ...

now if i run the application from pserve

 $ /bin/pserve app/development.ini --reload 

application started successfully, console log below

 test Starting subprocess with file monitor test Starting server in PID 9132. serving on http://0.0.0.0:6543 

I also tried logging into python directly to import paster.py, no problem either

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

must also be accurate

 $ 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 

What am I missing? thanks!

Edit www-data is the correct user.

 $ 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 

Change as Graham suggested, I replaced print 'test' with paste.py with

 import paste as p print p.__path__ 

listing when accessing the site via apache was /usr/local/lib/python2.6/dist-packages/paste , not virtualenv. I added all the examples that I could find on the Internet to point to my virtualenv in pyramid.wsgi , as well as to the pythonpath in the apache configuration file, but I still don't understand. Where else am I trying?

+4
source share
3 answers

In the end, I decided. From the console log, it is obvious that my main python installation in /usr/local/lib has a paste module installed that does not have a deploy handler.

The RedBaron comment for installing WSGIPythonHome worked, but the problem is that I have several applications, so I cannot just point WSGIPythonHome globally to a specific virtualenv application.

Anyway, I went through mod_wsgi docs again on virtualenv ( https://code.google.com/p/modwsgi/wiki/VirtualEnvironments#Baseline_Environment ) and saw that WSGIPythonHome should point to a "virgin environment". literally

 $ virtualenv --no-site-packages BASELINE 

and then pointing to WSGIPythonHome

 WSGIPythonHome /usr/local/pythonenv/BASELINE 

and point WSGIDaemonProcess for my virtual virtual application (which I already did at the beginning)

LESSON LEARNED: Pay attention to the documents ...


Finally, my pyramid.wsgi can be greatly simplified only for the following

 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') 
+3
source

In my case, reinstalling PasteDeploy in a virtual environment fixed the problem without knowing why.

+2
source

The error indicates that the PasteDeploy package is not installed.

+1
source

All Articles