Nginx+Unicorn部署Rails

前言

本文是基于已经安装好ruby环境的操作,如果没有配置好这些环境请参照配置ruby和rails环境

系统环境:Ubuntu 12.04.2 LTS

一.安装Nginx


sudo apt-get install nginx

更详细的安装参照Nginx安装

二.安装Unicorn


  • 没有安装unicorn的先执行下面的命令安装


    gem install unicorn


    或执行


    sudo gem install unicorn

三.配置Unicorn


  • 在项目的config目录下创建unicorn.rb文件,我这已经有一个配置好的模板了

    下载配置文件:unicorn.rb

    下载好后,将文件拷贝到config目录下,打开文件,修改里面的app_path目录为你项目的目录,修改listen端口为你想要的端口,至此这个配置文件搞定


  • 修改production.rb文件,让nginx处理静态页面


    vi config/environments/production.rb


    修改为下面的选项:


    config.serve_static_assets = false


    注意:这里修改成ture就表示unicorn自己处理静态资源


  • 编译项目文件


    bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:clean assets:precompile


    还有很重要一步就是在Gemfile中加入gem ‘unicorn’ ,不然在下面执行时会报错

    编译成功后就可以起unicorn了。


  • 至此,unicorn的配置基本完成了可以独立运行,下面再讲怎么配合nginx更高效的使用,启动unicorn的代码


    unicorn_rails -c config/unicorn.rb -E production -D





    bundle exec unicorn_rails -c config/unicorn.rb -E production -D


  • unicorn启动时报错即解决办法:

    查看报错的log(log文件在项目下的log文件夹下),执行:


    tail -fn100 log/unicorn.stderr.log


    根据提示解决问题.确保你再unicorn.rb里设置的端口没被使用,查看端口使用情况:


    netstat -anp


    还有记得每次修改了项目下的Gemfile文件都要执行bundle命令重新加载


四.配置Nginx反向代理

以后静态页面的请求就会nginx直接处理了,需要rails处理的才会转到unicorn

我已经写好了一个例子,下载下来后你可以根据自己的需要修改参数

下载配置文件:unicorn+nginx.conf

需要修改的参数说明:


server unix:修改为你项目所在目录的unicorn.sock文件

server localhost:修改为再unicorn.rb中配置的端口号

server_name: 解析到的域名

listen: ngnix的端口一般设置为80端口对外的

root: 项目所在目录的public的目录


五.重启ngnix


sudo service nginx restart


sudo /etc/init.d/nginx restart

至此,rails的发布搞定啦~~

要停止 unicorn_rails -c config/unicorn.rb -E production -D 发布可以采用下面的办法

第一步查找unicorn相关的进程:


ps aux|grep unicorn

第二步找到进程id号,注意找到一个叫master的主进程,kill掉就搞定嗯


kill -9 pid号

psaux

如上图,停止就可以执行


kill -9 29873