Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Python, apache, mod_wsgi  (gelezen 2944 keer)

Offline MKe

  • Lid
Python, apache, mod_wsgi
« Gepost op: 2011/03/07, 09:26:23 »
Hoi,

Dit is een grensgeval tussen programmeren en de server rubriek, maar goed:
Ik probeer een web-applicatie te maken die indien mogelijk gebruik maakt van mod_wsgi. Hij moet dus detecteren of mod_wsgi beschikbaar is, zo niet dan moet het script uitgevoerd worden als een gewone cgi script.

Ik heb mod_wsgi als volgt geinstalleerd (volgens http://ubuntuforums.org/showthread.php?t=833766):
sudo apt-get install libapache2-mod-wsgi
sudo a2enmod mod-wsgi #geeft een foutmelding: ERROR: Module mod-wsgi does not exist!
sudo /etc/init.d/apache2 restart

Vervolgens in de sites-available/default:
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews ExecCGI

AddHandler cgi-script .cgi
AddHandler wsgi-script .wsgi

AllowOverride None
Order allow,deny
allow from all
</Directory>
dus alle .wsgi bestanden worden herkend als wsgi. Tijdens de installatie krijg ik wel een foutmelding bij het a2enmod commando. Als ik nu een simpel wsgi-script schrijf, dan wordt dit keurig uitgevoerd, dus blijkbaar werkt het geheel goed ondanks de melding.
Het commando apache2ctl -t -D DUMP_MODULES geeft ook keurig 'wsgi_module (shared)' weer, dus dat zit ook goed.


Nu in python wil ik testen op de aanwezigheid van mod_wsgi:
try:
    from mod_wsgi import version
    ex='.wsgi'
except:
    ex='.py'

Dit geeft helaas altijd een foutmelding, waardoor mijn wsgi-scripts nooit worden gebruikt. Import mod_wsgi geeft ook steeds een foutmelding. Toch is dit volgens de mod_wsgi website een goede methode voor de test.
Weet iemand waarom dit niet werkt en hoe kan ik toch on-the-fly testen of mod_wsgi bestaat?
« Laatst bewerkt op: 2011/03/07, 09:27:56 door MKe »
Mijn blokkendoos blog: http://mke21.wordpress.com/

Offline jelmer

  • Lid
Re: Python, apache, mod_wsgi
« Reactie #1 Gepost op: 2011/03/14, 01:57:57 »
Volgensmij wordt de module bij het installeren standaard aangezet. De naam van de module bij het handmatig disabelen is in ieder geval "wsgi", dus om 'm te enabelen moet je "a2enmod wsgi" ipv "a2en mod-wsgi" uitvoeren.

Waar probeer je mod_wsgi precies te importeren? In een "los" Python script zal dat niet werken, maar alleen in een script dat ook daadwerkelijk door mod_wsgi wordt uitgevoerd.

Offline MKe

  • Lid
Re: Python, apache, mod_wsgi
« Reactie #2 Gepost op: 2011/03/14, 09:30:41 »
Volgensmij wordt de module bij het installeren standaard aangezet. De naam van de module bij het handmatig disabelen is in ieder geval "wsgi", dus om 'm te enabelen moet je "a2enmod wsgi" ipv "a2en mod-wsgi" uitvoeren.

Waar probeer je mod_wsgi precies te importeren? In een "los" Python script zal dat niet werken, maar alleen in een script dat ook daadwerkelijk door mod_wsgi wordt uitgevoerd.
Ik voer het idd uit in een py script die als cgi wordt uitgevoerd onder apache. Dit script zou altijd moeten werken (wsgi of niet). Dit is dus niet mogelijk?

Offline jelmer

  • Lid
Re: Python, apache, mod_wsgi
« Reactie #3 Gepost op: 2011/03/14, 11:16:13 »
Volgensmij wordt de module bij het installeren standaard aangezet. De naam van de module bij het handmatig disabelen is in ieder geval "wsgi", dus om 'm te enabelen moet je "a2enmod wsgi" ipv "a2en mod-wsgi" uitvoeren.

Waar probeer je mod_wsgi precies te importeren? In een "los" Python script zal dat niet werken, maar alleen in een script dat ook daadwerkelijk door mod_wsgi wordt uitgevoerd.
Ik voer het idd uit in een py script die als cgi wordt uitgevoerd onder apache. Dit script zou altijd moeten werken (wsgi of niet). Dit is dus niet mogelijk?
mod_wsgi kun je alleen maar importeren als mod-wsgi geactiveerd is. Wat natuurlijk wel altijd gaat is iets als:


try:
    import mod_wsgi
except ImportError:
    print "mod wsgi niet gevonden"
else:
    print mod_wsgi.__file__

Offline MKe

  • Lid
Re: Python, apache, mod_wsgi
« Reactie #4 Gepost op: 2011/03/15, 07:40:44 »
Bedankt. Maar dat geeft toch hetzelfde effect als wat ik deed?
Ik heb besloten om de gebruiker in een config file te laten kiezen of de wsgi variant gebruikt gaat worden. Dat werkt prima. Het is dus nog niet ogelost, maar probleem is in principe verholpen.