阅读更多
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的环境就基本搭建好了。