I didn't want those changes anyway.
March 12, 2009 at 02:48 PM | categories: personal, sourcecontrol, deploy | View CommentsI use hg (Mercurial) for version control. Since switching to hg I have adopted the following process. I also do this for my Git projects at work.
- I create a local branch to working.
- I setup my External Tools in Eclipse to run my test suite.
- The output of my test suite gets committed to my local branch.
- I squash the local branch messages when I merge in to master.
- I add some insightful commit message for my master commit. Like, I haz changes.
How-To: Python, Pylons, and Windows
October 07, 2008 at 02:00 PM | categories: python, pylons, deploy | View CommentsA friend having issues installing Pylons on Windows XP with Python 2.6 gave me the idea to do this quick write up. So here it is, the 6 step method for running Pylons on Windows XP.
- Download Python.
- Add Python to your path and launch a command prompt.
- Download ez_setup.py, python ez_setup.py
- Download simplejson, python setup.py --without-speedups install
- easy_install Pylons
- easy_install formbuild
- Do a quick test; paster create --template=pylons
Deploying Pylons with nginx
October 06, 2008 at 01:43 PM | categories: python, pylons, deploy | View CommentsIn preparation for a production deployment of a new Pylons app, I've been looking in to different deployment methods. In an effort to to be /. safe and Diggable when the new application launches, we've decided on 4 server deployment.
- 1 nginx server
- 2 pylons (paster) servers
- 1 postgresql server
worker_processes 2;
events {
worker_connections 1024;
}
http {
client_body_timeout 5;
client_header_timeout 5;
keepalive_timeout 5 5;
send_timeout 5;
tcp_nodelay on;
tcp_nopush on;
gzip on;
gzip_buffers 16 8k;
gzip_comp_level 1;
gzip_http_version 1.0;
gzip_min_length 0;
gzip_types text/plain text/html text/css;
gzip_vary on;
upstream pasters {
server 10.3.0.5:5010;
server 10.3.0.6:5011;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://pasters;
proxy_redirect default;
}
}
The paster servers are setup like this, I put them both in the same .ini and setup them up in the tpl. This lets me do an easy_install , setup-app based deployment without having to manually edit the ini to change the port numbers, which is error prone. This also lets you adjust and tune per server, instead of deploying 1 server section and changing it for each. Example would be if one server was way more powerful, you could tune it and then use the weighting in nginx to prefer that server. All without having to edit the ini after deployment.
[server:main] use = egg:Paste#http host = 0.0.0.0 port = 5010 use_threadpool = True threadpool_workers = 10 [server:main2] use = egg:Paste#http host = 0.0.0.0 port = 5011 use_threadpool = True threadpool_workers = 10Using 10 1000 on Apache bench gave me some good results. 85 requests per second to either of the standalone Paster servers. 185 requests per second when balanced with nginx. For fun, I deployed a third on my database server and was pleased to see 250 requests per second. Then I deployed 3 per server. So a total of 9 paster instances and was able to see 1080 requests per second. I also increased the thread of each from 10 to 25 , this uses more memory, but enables a higher RPS. Getting closer to the estimated 2,500 needed to survive a /. and should survive the estimated 1,000 from a high Digg.