rails deploy nginx mongrel

阅读更多
Ruby on rails推荐的生产运行环境是Linux/FreeBSD/Unix,即Unix系列的操作系统,采用nginx+mongrel的解决方案。在网上参考了N篇文章和经过2天的实验后,我终于搭建成功,非常感谢网上的高手们无私的奉献,当然,高手们毕竟是高手,有些东西还是讲的有些模糊,于是我自己做实验,借鉴高手的文章并整理出下面的这篇文章,希望对刚刚入门的朋友能够有所帮助。同时,恳请大家能够指正,谢谢!以下我将以CentOS5.1 Linux操作系统,nginx+mongrel,MySQL数据库为例,从源代码编译安装开始讲解。

准备工作:配置好网络,使其能够连接上互联网,利用CentOS Linux系统自带的yum命令安装、升级所需的程序库(RedHat等其他Linux发行版可从安装光盘中找到这些程序库的RPM包,进行安装):
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2
libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl
curl-devel

说明:以下的一切软件均安装在/lab目录下,例如:/lab/ruby等,操作的用户都是root



一、安装 Ruby 解析器

一些Linux发行版本,MacOSX操作系统都自带Ruby解析器,但是我仍然建议自行下载ruby源代码编译安装。因为一方面可以自己定制ruby安装的路径,另一方面可以在编译过程中自行添加更多的特性。

ruby的源代码可以从Ruby官方网站下载:
http://www.ruby-lang.org/en/downloads/

下载源代码包到本地Linux主机,然后解压缩,进入该目录,进行配置,编译和安装:
tar xzvf ruby-1.8.5.tar.gz
cd ruby-1.8.5
./configure –prefix=/lab/ruby
make && make install
如果想浏览所有的configure参数,可以:
./configure –help |more
如果不定制安装的目录,默认将安装到/usr/local目录下面。然而我建议自行定制一个ruby的安装目录,例如/lab/ruby,这样便于以后的升级,不会和操作系统其他软件混在一起。

安装好以后,修改操作系统PATH路径,加入/lab/ruby/bin:
export PATH=/lab/ruby/bin:$PATH
将我们自己安装的ruby放在系统PATH前面,避免操作系统自带的ruby造成的干扰。在Linux上,一般将设置放在/etc/profile中,便于对全局生效。

二、安装 ruby on rails

在安装rails之前,要先安装rubygems。rubygems是ruby的在线包管理工具,可以从rubyforge下载rubygems:
http://rubyforge.org/projects/rubygems/
下载好源代码包,解压缩,安装:
tar xzvf rubygems-0.9.0.tgz
cd rubygems-0.9.0/
ruby setup.rb

然后就可以安装rails了,在确认服务器已经连接互联网的情况下执行:
gem install rails –y
即通过gem从rubyforge网站下载rails所有依赖包安装。

安装好rails以后,可以执行:
rails –v
确认一下rails的版本。

P.S:在安装rails的过程中,由于需要远程安装rails的时候,但是安装不成功,
命令提示:
ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError)
getaddrinfo: Temporary failure in name resolution (SocketError)
getting size of http://gems.rubyforge.org/Marshal.4.8
原因是此服务器没设置DNS,不能对外访问网络。
解决方法:
#>vi /etc/resolv.conf
nameserver 192.168.0.1 (局域网内DNS)
nameserver 202.101.172.35 (电信DNS服务器)
nameserver 202.101.172.45 (电信DNS服务器)



三、安装 ruby 的数据库适配器

rails发行包中已经自带纯ruby的MySQL数据库适配器,然而对于生产环境来说,我们仍然应该下载安装C版本的

数据库适配器,以达到更好的性能。下载mysql-ruby-2.7.3.tar.gz:
http://www.tmtm.org/en/mysql/ruby/
tar xzvf mysql-ruby-2.7.3.tar.gz
cd mysql-ruby-2.7.3
ruby extconf.rb --with-mysql-dir=/lab/mysql  
make && make install
注意:--with-mysql-dir应该指向MySQL数据库的安装路径,如果数据库服务器和Web服务器不在同一台机器上,那么Web服务器上也必须安装MySQL软件,因为ruby的C版本MySQL适配器需要在编译的时候联接MySQL的系统库。MySQL的安装过程省略。


四、安装 Ruby 的 FCGI 支持

由于ruby的fcgi支持库需要在编译的时候联接FCGI的系统库,因此我们需要先安装FCGI库,下载FCGI源代码发行包:
http://www.fastcgi.com/dist/
tar xzvf fcgi-2.4.0.tar.gz
cd fcgi-2.4.0
./configure --prefix=/lab/fcgi
make && make install
同样,将fcgi安装在自己指定的目录下,而不是默认的/usr/local,避免多个软件混在一起。
然后就可以安装ruby的fcgi支持库了,下载ruby-fcgi-0.8.7.tar.gz:
http://rubyforge.org/projects/fcgi/
tar xzvf ruby-fcgi-0.8.7.tar.gz
cd ruby-fcgi-0.8.7
ruby install.rb config -- --with-fcgi-include=/lab/fcgi/include --with-fcgi-lib=/lab/fcgi/lib
ruby install.rb setup
ruby install.rb install

五、安装mongrel

在确认服务器已经连接互联网的情况下执行:
gem install mongrel –y
gem install mongrel_cluster -y

即通过gem从rubyforge网站下载rails所有依赖包安装。

可以通过gem query --local查看通过gem安装的软件包

配置mongrel:

假如你的rails工程放在/下

cd /
rails test
cd test
mongrel_rails start
** Starting Mongrel listening at 0.0.0.0:3000

** Starting Rails with development environment...

** Rails loaded.

** Loading any Rails specific GemPlugins

** Signals ready. TERM => stop. USR2 => restart. INT => stop (no restart).

** Rails signals registered. HUP => reload (without restart). It might not work well.

** Mongrel 1.1.5 available at 0.0.0.0:3000

** Use CTRL-C to stop.


然后无反应,我不知道是什么原因,只好CTRL+C强制退出:
** INT signal received.

但是不影响后面的结果,等待高手指点。
访问一下http://localhost:3000 看一下你的mongrel是否能启动能启动,OK则继续搭建mongerl的集群,(网上是这么说了,可是我是没有成功看到ROR的welcome aboard页面,反正继续往下做了,最后成功了)

mongrel_rails cluster::configure -e production -p 8000 -N 3 -c /test -a 127.0.0.1

注:-e 指定production | environment。-p 端口 。 -N mongrel服务进程数

这样会在test工程下生成一个config/mongrel_cluster.yml 这样一个配置文件,内容是:
 cwd: /test
log_file: log/mongrel.log
port: "8000"
environment: production //此为开发模式,改为environment即为开发模式
address: 127.0.0.1
pid_file: tmp/pids/mongrel.pid
servers: 3

mongrel_rails cluster::start
就可以把起来了三个mongrel进程。

六、下载安装nginx:

nginx下载地址:http://sysoev.ru/nginx/nginx-0.7.17.tar.gz
nginx所需pcre库文件:
ftp://ftp.csx.cam.ac.uk/pub/software...cre-7.7.tar.gz

安装Pcre库:
tar zxvf pcre-7.7.tar.gz
cd pcre-7.7
./configure
make && make install

安装nginx:
tar zxvf nginx-0.7.17.tar.gz
cd nginx-0.7.17
./configure --prefix=/lab/nginx --with_http_stub_status_module --with-http_ssl_module
make && make install

配置/lab/nginx/conf/nginx.conf文件:(仅供参考)
 #user nobody;
worker_processes 1;
error_log logs/error.log debug;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid /lab/nginx/nginx.pid;
events {
worker_connections 1024;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain;
upstream mongrel {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
}
server {
listen 80;
server_name XXX.XXX.XXX.XXX; 你可以用你的域名代替以可以是你的对用户发布的IP
root /usr/local/depot/public;
index index.html index.htm;
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 false;
if (-f $request_filename/index.html) {
rewrite (.*) $1/index.html break;
}
if (-f $request_filename.html) {
rewrite (.*) $1.html break;
}
if (!-f $request_filename) {
proxy_pass http://mongrel;
break;
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

测试nginx.conf文件配置是否正确:/lab/nginx/sbin/nginx -t,若出现:
the configuration file /lab/nginx/conf/nginx.conf syntax is ok

the configuration file /lab/nginx/conf/nginx.conf was tested successfully

则说明配置OK,否则,会有相应的提示。

启动nginx:/lab/nginx/sbin/nginx

然后打开浏览器,输入http://xxx.xxx.xxx.xxx/就可以看到R0R的welcome aboard页面

至此,一个基本的CentOS5.1+Nginx+Mongrel+ROR的环境就基本搭建好了。

你可能感兴趣的:(Rails,nginx,Ruby,MySQL,Linux)