Grazie delle delucidazioni,<br>credo che approfondirò adeguatamente wsgi.<br><br>ciao<br>IDM<br><br><div class="gmail_quote">Il giorno 27 luglio 2009 10.53, Roberto De Ioris <span dir="ltr">&lt;<a href="mailto:roberto@unbit.it">roberto@unbit.it</a>&gt;</span> ha scritto:<br>

<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im">On Mon, 2009-07-27 at 09:26 +0200, Ivan wrote:<br>
<br>
&gt;<br>
&gt;<br>
&gt;         Quali vantaggi/svantaggi ci sono nell&#39;utilizzare mod_python<br>
&gt;         anziché wsgi, con django ?<br>
&gt;         Il tutto su Linux con apache.<br>
&gt;<br>
&gt;         Walter<br>
&gt;<br>
<br>
</div>E&#39; un discorso lungo e come al solito e&#39; impossibile stabilire quale dei<br>
2 e&#39; migliore. Provo a fartela il piu&#39; facile possibile.<br>
<br>
Sono 2 approcci diversi con i loro pro e contro.<br>
<br>
WSGI e&#39; uno standard, e&#39; semplice, chiaro ed ha un solo obiettivo:<br>
rendere l&#39;implementazione di una applicazione web indipendente dal tipo<br>
di webserver che risiedera&#39; davanti. Stiamo parlando quindi di un<br>
protocollo non di una implementazione.<br>
<br>
mod_python invece e&#39; una implementazione (simile a mod_php come logica<br>
di funzionamento), integra in apache un interprete python che si occupa<br>
di eseguire il codice richiesto.<br>
<br>
Ora, un bravo amministratore di sistema gia&#39; si sentirebbe male al<br>
pensiero che il proprio webserver (che ricordo a tutti e&#39; esposto al<br>
pubblico e quindi gia&#39; di suo deve sostenere ogni tipo di attacco) venga<br>
&quot;inquinato&quot; da un nuovo modulo.<br>
<br>
A questo aggiungi che gli stai dicendo che il suo apache sara&#39; ora in<br>
grado di eseguire codice di qualsiasi tipo (con i permessi di apache) e<br>
nella sua mente arrivera&#39; la vocina del grillo parlante sysadmin che gli<br>
urla (con tanto di eco) &quot;attenzioneeee stai introducendo una componente<br>
non deterministica in un server esposto al pubblicooooo....).<br>
<br>
Ora non voglio scatenare il panico ma se avete un webserver su cui fate<br>
eseguire script di altri sotto mod_php (o mod_python) ricordatevi che e&#39;<br>
molto facile distruggere il vostro bel webserver. Indipendentemente da<br>
tutte le protezioni che il modulo possa includere.<br>
<br>
Questa e&#39; la nota negativa di mod_python (qualcuno potrebbe aggiungere<br>
che si tratta di un modulo apache non molto utilizzato e quindi di per<br>
se&#39; poco affidabile, ma su questa argomentazione non mi sento di<br>
esprimermi).<br>
<br>
Se pero&#39; stai mettendo su un webserver con una sola applicazione python<br>
scritta da te l&#39;equazione cambia e probabilmente il gioco VALE la<br>
candela. Almeno fin quando non decidi che apache (o Linux) ti fanno<br>
schifo e vuoi sostituirli.<br>
<br>
E&#39; qui che WSGI ti da una mano. E&#39; indipendente dal webserver (e<br>
ovviamente dal sistema operativo). Puoi spostare la tua app da un<br>
webserver a un altro (che supporti wsgi ovviamente) senza cambiare una<br>
sola riga di codice. Riconfiguri il webserver e sei operativo.<br>
<br>
Ma apache come comunica con una applicazione WSGI ?<br>
<br>
E&#39; qui che entrano in gioco le implementazioni di server WSGI.<br>
<br>
Ci sono molti webserver wsgi scritti in python a cui le richieste<br>
vengono passate via http dal webserver (quindi un reverse proxy, piu&#39;<br>
standard di cosi&#39; si muore). Il webserver di CherryPy e&#39; uno di questi.<br>
<br>
mod_wsgi per apache (di cui trovi una variante, sotto molti aspetti<br>
superiore, per nginx) puo&#39; funzionare sia in maniera simile a mod_python<br>
(integrando l&#39;interprete python in apache che si occupa di eseguire il<br>
modulo wsgi) o in modalita&#39; &quot;daemon&quot; per cui viene generato uno o piu&#39;<br>
processi (che possono girare con il loro uid) che si occupano di gestire<br>
le richieste che Apache gli passa attraverso un socket/pipe.<br>
<br>
Flup, e&#39; un server WSGI che comunica con il webserver tramite<br>
FastCGI,SCGI e (udite udite) AJP.<br>
<br>
uWSGI (drin drin, pubblicita&#39;) e&#39; un server WSGI in C che riceve le<br>
richieste da apache su socket UNIX tramite un semplice ed efficiente<br>
protocollo. Non fa della facilita&#39; di utilizzo (come va di moda di<br>
questi tempi) il suo punto di forza, ma punta tutto sulle feuture e<br>
sull&#39;affidabilita&#39;.<br>
<br>
Ci sono altre decine di server (con i piu&#39; svariati approcci), trovi<br>
l&#39;elenco qui:<br>
<br>
<a href="http://www.wsgi.org/wsgi/Servers" target="_blank">http://www.wsgi.org/wsgi/Servers</a><br>
<br>
<br>
Ovviamente (punto non trascurabile) praticamente tutti i framework web<br>
in python (e molte applicazioni) sono compatibili wsgi. Ma e&#39; anche vero<br>
che mod_python e&#39; compatibile con qualsiasi cosa che sia scritta in<br>
python :)<br>
<br>
Cosa scegliere ? Io personalmente ho scommesso sull&#39;approccio WSGI e<br>
come punto a suo favore posso aggiungere che nel mondo ruby (dove il<br>
deploy e&#39; un totale incubo) si e&#39; sviluppato Rack che e&#39; pressocche&#39;<br>
uguale a WSGI mentre mod_ruby e&#39; stato praticamente relegato in un<br>
angolino buio e puzzolente.<br>
<br>
Il link che ti ha mandato prima Sandro e&#39; sicuramente un ottimo punto di partenza.<br>
<font color="#888888"><br>
<br>
--<br>
Roberto De Ioris<br>
<a href="http://unbit.it" target="_blank">http://unbit.it</a><br>
JID: <a href="mailto:roberto@jabber.unbit.it">roberto@jabber.unbit.it</a><br>
</font><div><div></div><div class="h5"><br>
_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it">Python@lists.python.it</a><br>
<a href="http://lists.python.it/mailman/listinfo/python" target="_blank">http://lists.python.it/mailman/listinfo/python</a><br>
</div></div></blockquote></div><br>