在Nginx上运行Ruby on Rails

本文将指导您在Ubuntu/Debian上从Ruby和Rails开始,一步一步的安装配置Ruby on Rails环境,并结合Nginx运行环境获得优异的性能。

安装Ruby

export PATH="${PATH}:/var/lib/gems/1.8/bin/" 



echo 'export PATH="${PATH}:/var/lib/gems/1.8/bin/"' >> /etc/bash.bashrc  



aptitude install ruby rubygems vim-ruby rub y-dev libzlib-ruby   


libyaml-ruby libreadline-ruby libncurses-ruby rdoc ri libcurses-ruby   


libruby libruby-extras libfcgi-ruby build-essential libopenssl-ruby   


libdbm-ruby libdbi-ruby libxml-ruby libxml2-dev 

安装Rails

gem install -v=2.3.5 rails 

gem install rails也应该可以工作,但2.3.6-2.3.8(目前正在编写)存在问题。如果你想尝试最新版本,则可以使用:

gem install rails Cpre 

或使用RVM,RVM是一个命令行工具,允许我们更容易安装,管理和使用多个Ruby环境。

应用程序

我的新应用程序叫做myapp.example.com。

cd /var/www  



rails new myapp.example.com  



cd myapp.example.com 

Thin服务器

Thin将成为Ruby服务器:

gem install thin  


thin install  


/usr/sbin/update-rc.d -f thin defaults  


thin config -C /etc/thin/myapp.example.com -c 



/var/www/myapp.example.com --servers 3 -e development # or: -e production for caching, etc 

如果你不喜欢Thin,还有Mongrels:

aptitude install mongrel mongrel-cluster  



mongrel_rails cluster::configure -e development -p 3000 -N 3 -c /var/www/myapp.example.com 




          -a 127.0.0.1 # or: -e production for caching, etc  



mkdir /etc/mongrel_cluster  


sudo ln -nfs /var/www/myapp.example.com/config/mongrel_cluster.yml /etc/mongrel_cluster/myapp.example.com.yml  


#sudo ln -nfs /var/www/myapp.example.com/config/mongrel_cluster.yml 



/etc/mongrel-cluster/sites-enabled/myapp.example.com.yml 

安装Nginx

Nginx将作为Web服务器,代理发送给Thin的Ruby请求,运行在端口3000-3002上,使用下面的命令进行安装:

aptitude install nginx 

安装好Nginx后,创建一个Vhost(虚拟主机),编辑/etc/nginx/sites-enabled/myapp.example.com,输入:

upstream myapp {  


    server 127.0.0.1:3000;  


    server 127.0.0.1:3001;  


    server 127.0.0.1:3002;  


}  


server {  


    listen   80;  


    server_name .example.com;  


   


    access_log /var/www/myapp.example.com/log/access.log;  


    error_log  /var/www/myapp.example.com/log/error.log;  


    root       /var/www/myapp.example.com;  


    index      index.html;  


   


    location / {  



        proxy_set_header  X-Real-IP  $remote_addr;  




        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;  




        proxy_set_header  Host $http_host;  



        proxy_redirect    off;  



        try_files /system/maintenance.html $uri $uri/index.html $uri.html @ruby;  



    }  


   



    location @ruby {  



        proxy_pass http://myapp;  


    }  


} 

数据库

首先安装SQLite:

aptitude install -y libdbd-sqlite3-ruby sqlite3 libsqlite3-dev libsqlite3-ruby  


gem install sqlite3-ruby 

MySQL

如果你想使用MySQL,则使用下面的命令进行安装:

aptitude install -y libmysqlclient-dev  


gem install mysql 

然后修改你的/var/www/myapp.example.com/config/database.yml,如:

development:  


    adapter: mysql  


    host: localhost  


    database: myapp  


    username: myapp  


    password: xxxxxxx 

注意,database.yml不支持Tab键,如果你使用的是vim,可能需要做如下设置:

:set expandtab  



#:set tabstop=4 # how many spaces should tabs be replaced withs  




:retab 

然后将下面的内容添加到./Gemfile,让你的应用程序使用MySQL:

gem 'mysql', '2.8.1' 

假设你已经有一个MySQL服务器在运行,如果没有,你需要先运行aptitude install mysql-server安装它。

gem安装配置

gem install uuidtool  


gem install ruby-debug  


gem install ruby-graphviz  


gem install json  


gem install activemerchant 

启动应用程序

让我们重启我们的守护程序,看看它是否能正常工作。

对于Thin:

/etc/init.d/thin restart && /etc/init.d/nginx reload; tail -f log/*.log 

对于Mongrel

mongrel_cluster_ctl restart && /etc/init.d/nginx reload; tail -f log/*.log 

在config/routs.rb中添加:

map.root :controller => "home" 

创建一个home控制器,移除‘Welcome aboard’HTML:

相关推荐