Passenger/Nginx/Ubuntu/MySQL详尽部署Rails 3.2/Ruby1.9.3

关于Rails部署在Ubuntu下,网上有很多相应的方法。刚开始学习时,部署成了最大的难题。相对于Java的部署,要更复杂些,更重要Rails对Windows的支持不好,所以建议使用Linux进行部署。
我的VPS为Linode的Ubuntu11.10,总结一下网上所学到的知识和自己的部署过程,以方便初学者可以更容易的部署环境。因为我刚开始部署时,遇到了非常多的问题,而且Rails更新快,中文资料跟不上Rails的发展,每个Rails版本的更新都有不少的区别。昨天重新部署了一下VPS,过程很顺利,下面跟大家分享一下部署的过程和一些注意懂问题。
更新源
$sudo apt-get update
$sudo apt-get upgrade
复制代码
校正时区
 
$sudo dpkg-reconfigure tzdata
选择Asia,然后再选择自己所在的时区【shanghai】。
安装所需的linux包
 
$sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev  libxml2-dev libxslt-dev autoconf libc6-dev zlib1g-dev libssl-dev build-essential curl git-core libc6-dev g++ gcc
复制代码
添加一个rails用户和一个passenger用户组
 
$sudo addgroup passenger
$sudo adduser railsu
$sudo usermod -G passenger,www-data,sudo railsu
$su - railsu
复制代码
Ruby&Rails的安装
安装 rvm(可以进行ruby版本控制)
 
$bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
安装过程命令行有详细的提示。
加载rvm (只需第一次安装时加载)
$source .bashrc
安装完毕后,重启终端,可以根据以下这个命令看一下是否安装成功:
 
$rvm –v
如果有类似与版本提示相关而非报错,说明安装成功。如果这里说RVM不是一个命令,最简单的办法是关闭命令行重新打开一个再试。
安装Ruby
 
$rvm install 1.9.3  #1.9.3为ruby的版本
这里假设安装的版本是1.9.3,安装命令非常简单,安装完成后,需要设置默认的Ruby版本如下:
 
$rvm use 1.9.3 default  #设置1.9.3为默认的版本
$ruby –v                #查看当前ruby的版本
复制代码
查看当前Ruby的版本,方法同上,碰到检测不到的时候先关闭命令窗口再重新打开。(注意:每次关闭命令窗口后,登录的用户名均使用刚刚添加的帐号进行登录)
安装Rails
 
$gem install rails  #我安装时候的rails版本为3.2.1
这里是不需要获取管理员权限再执行的,因为据说如果加了sudo的话那么以后这个只能给管理员本人用了。直接由rvm进行rails版本的控制,gem安装可以更加方便的进行有效的版本控制。安装成功后可以通过以下命令查看使用的版本:
$rails -v 
$gem –v
复制代码
这里可以分别看到Rails和负责安装的Gem的版本,如果读取异常,可以关闭命令行重新打开。操作方式完全同上面的查看版本验证方式。
因为Rails的默认数据库是sqlite,因此需要安装相关的支持:
 
$sudo apt-get install sqlite3 
$sudo apt-get install libsqlite3-dev 
$gem install sqlite3-ruby
复制代码
Rails里面自带着一个服务器,方便使用的时候进行测试,开启的命令是rails server。现在我们安装相关的支持:
 
$sudo apt-get install openssl libssl-dev 
$sudo apt-get install libopenssl-ruby1.9.1
复制代码
安装 passenger/nginx
passenger/nginx安装命令
 
$gem install passenger
$sudo apt-get install libcurl4-openssl-dev  #安装SSL gem
#遵从passenger官方安装指南(http://www.modrails.com/install.html)的提示,开始安装:
$rvmsudo passenger-install-nginx-module     #都是默认选择,选择1,安装目录也选择默认 /opt/nginx/
复制代码
passenger 会自动修改config, 添加passenger所在的rvm的ruby和gem环境地址。
安装nginx启动脚本
 
$wget https://raw.github.com/gist/1548664/53f6d7ccb9dfc82a50c95e9f6e2e60dc59e4c2fb/nginx
$sudo cp nginx /etc/init.d/
$sudo chmod +x /etc/init.d/nginx
$sudo update-rc.d nginx defaults
复制代码
nginx启动和停止命令
 
$sudo /etc/init.d/nginx start  #nginx启动
$sudo /etc/init.d/nginx stop   #nginx停止(我在用这个命令之后无法完全把nginx停止,再次开启的时候会出现端口占用情况,如果有谁可以知道问题所在可以给我留言)
#目前使用该命令停止nginx  $sudo /opt/nginx/sbin/nginx -s stop
$sudo /etc/init.d/nginx restart  #重启nginx
复制代码
简易配置nginx
配置文件在 /opt/nginx/config/nginx.conf
 
参考: http://wiki.nginx.org/NginxFullExample
 
参考: http://wiki.nginx.org/NginxChsFullExample
 
参考: http://modrails.com/documentation/Users%20guide%20Nginx.html
因为我对nginx不太熟悉,对配置文件只是做简单的配置。
 
gzip  on;  #去除gzin on的注释,此行作用是对访问网站进行代码的压缩,加快访问速度
原本server的配置对对应的站点地址进行修改。
 
#原来的配置
server { 
  listen       80; 
  server_name  localhost; 
  #charset koi8-r;  
  #access_log  logs/host.access.log  main; 
     location / {    
        root   html; 
        index  index.html index.htm;
     }


....
}


#修改
server { 
  listen       80; 
  server_name  www.XX.net;
  root /home/railsu/***/public;    #你项目中的public目录
  passenger_enabled on;
  rails_env development;       #此处可以设置,rails的模式
 
  #charset koi8-r;  
  #access_log  logs/host.access.log  main; 
  #注释下面的配置
  #   location / {    
  #     root   html; 
  #     index  index.html index.htm;
  #  }


....
}
复制代码


现在启动nginx还会报nobody无法取得某些目录的写入权限。因为nginx默认为nobody启动的。可以有两个方法:
1、  将应用和应用目录下所有文件夹和文件都置为权限777。执行 chmod 777 –R 应用目录
2、  将nginx的启动用户设置为具有操作应用目录的用户。如root(不建议)或者用户本身。具体做法是更改/opt/nginx/conf/nginx.conf第一行。user 用户名 组名
而我进行如下的设置,例如我这里设置的是railsu用户,站点文件夹的名字为website。
 
chown jesktop -R website
特别提示,在对文件夹进行权限设置时,不要设置为777。可以通过:
 
chmod -R 755 website                       #确保文件夹是755
find mysite -type f -exec chmod 644 {} \;  #文件是644权限
复制代码


安装node.js
因为rails3.1版本以上,需要对asset等的支持,可以需要安装上node.js(Installing Node.js via package manager),安装方法如下:
 
$sudo apt-get install python-software-properties
$sudo add-apt-repository ppa:chris-lea/node.js
$sudo apt-get update
$sudo apt-get install nodejs
#It installs current stable Node on the current stable ubuntu.


#If you want to compile Node C++ modules:


$sudo apt-get install nodejs-dev
#Or configure shell script for install node.js using http://apptob.org
复制代码
安装MySQL
安装MySQL命令
 
$sudo apt-get install mysql-server mysql-client  #请牢记安装过程中输入的密码
修改MySQL配置,以便可以进行外部访问和支持UTF-8,中国市区,红色为需要添加地方
 
$sudo vim /etc/mysql/my.cnf  #运行配置文件


#修改配置文件
[client] 
default-character-set = utf8 
port            = 3306
socket          = /var/run/mysqld/mysqld.sock


# Here is entries for some specific programs 
# The following values assume you have at least 32M ram  
# This was formally known as [safe_mysqld]. Both versions are currently parsed.


[mysqld_safe] 
socket          = /var/run/mysqld/mysqld.sock 
nice            = 0 


[mysqld] 
default-character-set = utf8
init_connect = 'SET NAMES utf8'
default-time-zone = '+8:00' 


# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure. 


#bind-address           = 127.0.0.1
复制代码
重启mysql服务 
 
$sudo service mysql restart
登录mysql
 
$mysql –u root –p “密码”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值