rails的很多资料,都是用Apache做的举例,我还是比较喜欢性能更高的Nginx,于是找了一番资料并亲手逐步试验之下,修正了资料中的一些错误,形成了下面正式的文档。感谢网络、感谢众多资料文档原作者:)
实际安装与测试版本为Ubuntu Server 10.04 32位X86版,不过理论上,以下步骤也适用于Ubuntu Server 9.04与桌面版。主要安装目标是搭建一个基于ruby企业版的rails3的高速运行环境,同时在该台服务器上支持php及相关工具。为什么要用ruby企业版呢?唔,根据官网资料,ruby企业版更加稳定,而且内存性能有33%以上的提升。
主要安装步骤如下所述:
1 安装ubntun
创建一个非root用户
adduser shuqi888
更新源
sudo apt-get update
sudo apt-get upgrade
校正时区
sudo dpkg-reconfigure tzdata
选择Asia,然后再选择自己所在的时区【chongqing】。再查看是否设置正确:
date
2 安装一些通用包
passenger等很多程序安装的时候都需要,干脆提前安装好.
最重要的是gcc等编译环境。
sudo apt-get install gcc
sudo apt-get install build-essential
其次重要的是git.
sudo apt-get install git-core
还有先下载,解压等功能的包。
sudo apt-get install libcurl4-openssl-dev libssl-dev zlib1g-dev libreadline5-dev
最后是图片库imagemagick
sudo apt-get install imagemagick
创建管理下载文件的目录
进入自己的home目录,并且创建一个临时文件夹,用于管理未来下载的一些文件。
cd /home/shuqi888
mkdir download
3 安装MySQL
sudo apt-get install mysql-server mysql-client
请牢记安装过程中输入的密码。
4 安装ree
进入之前创建的下载目录,
cd /home/shuqi888/download
登陆ree官方网站
找到最新版本的下载地址,然后使用wget直接下载到刚才的目录:
wget
然后开始安装
sudo dpkg -i ruby-enterprise_1.8.7-2010.02_i386_ubuntu10.04.deb
检查安装是否成功:
ruby -v
正常应输出:
ruby 1.8.7 (2010-04-19 patchlevel 253) [i686-linux], MBARI 0x8770, Ruby Enterprise Edition 2010.02
同时使用
gem list
可以看到,ree默认添加了一些老版本的gem,比如rails (2.3.8),passenger (2.2.14)等。在后续步骤中,我们将更新掉这些gem。
5 安装rail并更新已经被ree默认安装的gem //这一步联网对网速要求有点高,有时候会失败,重新执行一遍命令就好了
gem update --system
gem install rake
gem install rails
gem update
6 安装nginx and passenger
请务必注意,安装passenger之前,请使用gem list命令检查已经安装的passenger的版本。如果不是最新的版本,请务必使用gem install passenger而非gem update命令更新掉之后,才执行以下步骤。
遵从passenger官方安装指南的提示,开始安装:
passenger-install-nginx-module
按照界面提示,默认安装即可。安装成功之后,检查nginx是否成功安装:
打开nginx的默认安装目录:
sudo nano /opt/nginx/conf/nginx.conf
确保如下所示:
http {
...
passenger_root /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.0;
passenger_ruby /usr/local/bin/ruby;
...
}
passenger_ruby如果不是指向ree的ruby解释器,会导致之后的gem源丢失问题,请务必确保此处指向的ruby与你所使用的ruby环境中的一致。
passenger如果不是指向3.0版本,则会报Unable to start the Phusion Passenger watchdog 错误。
启动nginx
sudo /opt/nginx/sbin/nginx
重启可以使用:
sudo /opt/nginx/sbin/nginx -s reload
刷新首页,应能出来nginx的欢迎界面,如不能,则往往是需要reboot
7 配置nginx随机启动
passenger默认会将nginx安装到/opt/nginx下,与直接安装nginx的路径略有差异,请特别注意。
参考Gist525330写一个脚本到:/etc/init.d/nginx,命令如下:
cd /home/anrenserver/download/
git clone git://gist.github.com/525330.git
sudo mv 525330/nginx.sh /etc/init.d/nginx
chmod +x /etc/init.d/nginx
#此处不能使用sudo chown等其他更改权限方式
让启动脚本随机启动:
sudo /usr/sbin/update-rc.d -f nginx defaults
sudo /etc/init.d/nginx start
如果成功,则可以直接使用start,stop,restart,reload控制nginx
更多关于passenger的nginx用法,可以参考向导文件
更多关于nginx的配置文件写法可以参考这里
8 测试rails应用
Rails3默认使用SQLite3,所以如果没有,需要先安装一下。
sudo apt-get install sqlite3 libsqlite3-dev
sqlite3 --version
看到3.6.22,正常安装了。
上传一个本地的rails应用,
tar -cpzf /backup/home.bak.tar.gz /home
然后解压,
tar -xvf home.bak.tar.gz
再bundle install,再运行migrate任务。
rake db:migrate RAILS_ENV=production
对于有些应用来说,比如将静态文件写入到public目录,则需要赋予public目录权限:
chmod 777 public
按照安装提示修改nginx的配置文件,
sudo vi /opt/nginx/conf/nginx.conf
在server配置节,倒数第二行增加:
server {
listen 80;
server_name ;
root /somewhere/public; # <--- be sure to point to 'public'!
passenger_enabled on;
}
nginx的passenger模块默认是生产模式,如果是在本机进行开发,请更改。示范如下:
server {
listen 80;
server_name ;
root /users/shuqi888/projects/demo/public; # <--- be sure to point to 'public'!
passenger_enabled on;
rails_env development;
}
如果是在本机而不是服务器调试,记得修改host文件,
sudo vi /etc/hosts
增加:
127.0.0.1