Many thanks for your tutorial Ivan,
I'll give it a try... have you noticed any improvements with cherokee? could you show us your "ab" benchmarks?

regards,
Alex F

P.S: try to make an slice in web2pyslices.com

El 14/01/2010 23:14, Ivan P escribió:
Inspired by Phyo Arkar's howto on setting up web2py with Cherokee and
FCGI I tried the setup, but was somewhat unsatisfied with the fcgi
method and decided to try uWSGI. I am happy I did so, since it proved
to be real easy and uWSGI is a real powerhouse and deserves attention
of the whole python webdev community. On to the howto.

I. Compile from source and run the latest uWSGI, 0.9.3 in my case
(available here http://projects.unbit.it/uwsgi/wiki).
1. Download the source from and unzip.

2. To compile you must install packages python-dev and libxml2-dev (at
least thats what they are called on a debian-based system)

3. When compiling simply run pick a makefile which matches your OS and
python version and run something like "make -f Makefile.Linux.Py26".
This produces only one executable named uwsgi26, where 26 is my python
version. You can put it in /usr/local/bin.

5. To run it, you have two options:

5a) Create an xml file and call it, for example, config.xml. Put
something like this in it:
<uwsgi>
     <pythonpath>/var/web2py/</pythonpath>
     <app mountpoint="/">
     <script>wsgihandler</script>
     </app>
</uwsgi>
In this file "pythonpath" is where your web2py directory is and
"script" is the file you want to run, in this case its web2py's
"wsgihandler.py". Now run uWSGI like this, but replace "www-data" with
the owner of your web2py directory, if its the same as your current
user omit the sudo command:
sudo -u www-data uwsgi26 -s /tmp/uwsgi.sock -C -x config.xml
Why you need to change user is because web2py writes things (session
data for example) to disc during execution, so the uwsgi process,
which runs the web2py code, has to be the owner of the directories
that contain the framework. Note that uwsgi now opened a socket we
called "/tmp/uwsgi.sock" About other options consult the uwsgi manual
or "uwsgi -h".

5b) You can omit the xml file and pass all the info via command line,
doing that is easy, so consult the uwsgi docs :)


II. Setting up cherokee (0.99.37 in my case).
1. Install it, run cherokee-admin, go to localhost:9090

2. Open "Information Sources" and create a new one with these
parameters:
Nick: web2py
Connection: /tmp/uwsgi.sock
Interpreter: uwsgi26 -s /tmp/uwsgi.sock -C -x /path/to/config.xml
The interpreter line is why it is a good idea to have your web2py
source owned by www-data or the Cherokee server's user - when cherokee
runs it, you can be sure that owners of the sources and process match.
And of  course put the correct path in.

3. Go to "Virtual Servers" and edit the default one, or you can create
a new one, but make sure you give it a domain name to avoid conflict
(not really sure what happens when they conflict).

4. Go to the "Behavior" section and edit the "Default" behavior.

5. Set the "Handler" to uWSGI and on the bottom set the information
source to "web2py"

6. Pick "Hard restart" from the dropdown on the left and click "Save".
TO PREVENT HEADACHE READ THIS: I seem to get inconsistent results with
these restarts, so if you're doing production it seems to me that one
should restart the server manualy (via /etc/init.d/cherokee restart,
that is). Or maybe I should RTFM.

6. Go to localhost and BAM! (or at least I hope its a bam). veeery
easy if all goes smooth.

"But wait, what about url rewriting?" was my thought, and this caused
much confusion, so I'll add a section on that.


III. Doing some redirection (I'll give few examples due to poor
knowledge of regex).
Lets redirect "localhost/" to "/myapp/cntrlr/index"
1. Go back to the "Behavior" section of your server.

2. Add a new rule and set it's type to "Regular Expression" and set
the regular expression to "^/$", this simply matches "localhost/" or
"localhost", nothing more, nothing less.

3. Go to the "Handler" section and set the rule to "Redirect" with
these parameters
Type: Internal
Regular Expression:     (yes, blank)
Substitution: /myapp/cntrlr/index
The regular expression is blank because for this scenario we did all
the matching while defining a new behavior, you can combine the two in
creative ways.

That's about all. Your imagination should take care of the rest. I,
for example, put my static files separately from the framework by
creating a behavior that points to "/static" and picking "static
files" as the handler.
Thanks to Massimo DiPierro for web2py and Phyo Arkar for his cherokee
howto.
I'm not much of a writer so feel free to ask for clarifications.

--
Alejandro Fanjul Fdez.
[email protected]
www.mhproject.org
-- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en.


Reply via email to