使用nginx+passenger部署Rails应用

(转帖请注明 http://qa.taobao.com

部署Rails应用有多种选择,使用nginx+passenger是一种不错的选择。

如何安装passenger + nginx,具体安装请参考:http://blog.samsonis.me/2011/03/archlinux-rvm-ruby-rails-nginx-passenger-and-you/

这里讲下passenger的相关配置,passenger 有两种启动方式:

作为nginx模块来启动

在nginx配置文件中添加passenger相关配置。
(具体参考file:///usr/local/rvm/gems/ruby-1.9.2-p0/gems/passenger-3.0.7/doc/Users%20guide%20Nginx.html)
——————————-
#/opt/nginx/conf/nginx.conf
http {
passenger_root /usr/local/rvm/gems/ruby-1.9.2-p0/gems/passenger-3.0.7;
passenger_ruby /usr/local/rvm/wrappers/ruby-1.9.2-p0/ruby;
passenger_max_pool_size 100;
passenger_max_instances_per_app 20;
passenger_spawn_method smart;# smart-lv2/conservative
passenger_pool_idle_time 3600;
passenger_pre_start http://twork/rack;
...
server {
listen 80;
server_name twork;
root /home/rails/public;
passenger_enabled on;
passenger_use_global_queue on;
passenger_min_instances 3;
...

独立启动(Standalone)

命令行:
passenger start -p 3000 -e production --max-pool-size 100 --min-instances 3 --spawn-method smart;
本以为这些配置能放到配置文件中,在passenger启动的时候加载进来,但passenger start –help没发现配置文件的选项,网上也没搜索到。(mongrel支持的)

解决请求超时,nginx分发到多台机器的问题

这个问题在复制测试集操作时被发现。原因是请求超时(60s)后,nginx将请求发到了每台服务器上。结果导致被处理了5次。
解决办法:在nginx.conf中增加配置:
#To void nginx timeout and proxy_pass to many machines,config this location
location ^~ /testsuites/move_and_copy {
proxy_pass http://single;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

请这些请求可能超时的请求路由到一台机器上即可。

你可能感兴趣的:(Rails)