Am incercat sa urmez cateva tutoriale pe tema setarii mod_python, dar nu a reusit de fiecare data. Aveți un bun, pas cu pas, rock-solid howto?
Caseta mea dev este OS X, producție - Centos.
Există două modalități principale de a rula Python pe Apache. Cel mai simplu ar fi să utilizați CGI și să scrieți scripturi normale Python, în timp ce al doilea utilizează un cadru web ca Django sau Piloni.
Utilizarea CGI este simplă. Asigurați-vă că fișierul de configurare Apache are un cgi-bin setat. Dacă nu, urmați documentația acestora ( http://httpd.apache.org/docs /2.0/howto/cgi.html ). În acest moment tot ce trebuie să faceți este să plasați scripturile Python în directorul cgi-bin, iar ieșirea standard va deveni răspunsul HTTP. Consultați documentația Python pentru informații suplimentare ( https://docs.python.org/library/cgi. html ).
Dacă doriți să utilizați un cadru Web, va trebui să configurați mod_python sau FastCGI. Acești pași depind de cadrul pe care doriți să îl utilizați. Django oferă instrucțiuni clare privind configurarea mod_python și Django cu Apache ( http://www.djangoproject.com / documentare / modpython / )
Da, mod_python este destul de confuz pentru configurare. Iată cum am făcut-o.
În httpd.conf:
LoadModule python_module modules/mod_python.so
AddHandler mod_python .py
PythonHandler myapp
PythonDebug On
și în directorul de aplicații:
$ /serverbase/htdocs/myapp$ ls -l
total 16
-r-xr-xr-x 1 root sys 6484 May 21 15:54 myapp.py
Repetați configurația pentru fiecare program python pe care doriți să îl rulați în mod_python.
Executați Python pe UNIX sau Windows?
An alternative to mod_python and FastCGI is mod_wsgi. You can find out more at modwsgi
Am construit și instalat acest lucru pe Solaris fără probleme. Am incercat anterior mod_python, dar am intrat in probleme cu bibliotecile partajate, ca parte a construirii. Există docs de instalare disponibile.
Problema pentru mine nu a fost instalată în Apache, ci pentru a înțelege modul în care mod_apache utilizează de fapt fișierele .py. Modulele la nivel de declarații (inclusiv cele dintr-o secțiune if __name __ == '__ principal __'
) sunt nu executate - este ceea ce serverul va scoate la ieșire, dar nu funcționează așa.
În schimb, am scris o funcție pe nivel de modul numită index ()
și am revenit ca un șir HTML al paginii. De asemenea, este posibil să existe alte funcții la nivel de modul (de exemplu, otherFunction ()
) care pot fi accesate ca segmente suplimentare în URI (de exemplu, testScript / otherFunction
testScript.py
.)
Evident, acest lucru are mai multă sens decât concepția mea inițială stdout. O mai bună capacitate de a folosi Python ca limbaj de scripting și nu un limbaj de markup humongous.