ubunutu 12.04 下使用passenger+nginx 部署 rails应用

这里默认环境为rvm、ruby和rails都已经装好了


1、安装passenger和nginx

marco@marco:~$gem install passenger

因为原生的nginx不支持动态module载入,所以我们需要用passenger来安装有由passenger改版过的nginx

marco@marco:~$rvmsudo passenger-install-nginx-moudle #如果是root用户就省掉那个rvmsudo吧
执行这个命令期间会检查各种各样的环境,缺什么就按照提示用apt-get装什么就好了。

可能还会一道一个问题就是报错说rvm版本过低这个时候按照提示执行

marco@marco:~$rvm get stable && rvm reload && rvm repair all

就可以了。


之后按照提示选择要安装的部分和安装的路径就好了。


看看你的安装路径在哪,我的安装路径是在/opt/nginx下,接着就可以启动了

marco@marco:~$sudo /opt/nginx/sbin/nginx   //因为/opt的权限问题,所以要使用sudo来获取权限
启动以后nginx有个默认监听80端口的demo,所以打开浏览器输入自己的localhost:80就可以看到连上了。

到这里就都装好了,剩下的就是部署了。


这里在提一些关闭nginx的命令:

在/opt/nginx/logs/nginx.pid这个日志里记录的是现在正在跑的nginx的主线程的pid。所以要关闭nginx只需要执行这么一条命令

marco@marco:~$cat "/opt/nginx/logs/nginx.pid" | xargs sudo kill -9

就可以关掉。其中 xargs这个指令就是将上一个指令的输出作为该指令的参数。

特别注意,这个方法只有在/opt/nginx/conf/nginx.conf中将worker process的user设置为非nobody的时候有用,否则就无法将worker process连带着杀死。


如果真的是这样也是有办法执行一条指令就将他们都杀死的

marco@marco:~$ps aux | grep nginx | cut -c 9-15 | xargs kill -9
这样就好了。

如果觉得这些指令都太长了也不是没有简单的办法,打开~/.bashrc这个文件,写入一下内容

alias sn='sudo /opt/nginx/sbin/nginx' 
alias kn='sudo kill `cat /opt/nginx/logs/nginx.pid `' 
alias rn='kn; sn'
这样就可以在命令行中依靠输入sn、kn和rn来起到启动、停止、重启nginx的作用了。



2、部署Rails应用


打开/opt/nginx/conf/nginx.conf(这个是nginx的安装路径,如果不一样的话就按照自己的来)这个文件,将里面内容修改为:

user root;  #这里默认是nobody,如果不改成root的话,关闭nginx的时候杀死master线程无法一并杀死worker线程

worker_processes  1;  #控制work线程的数量

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;  #上面是配置日志输出的目标文件


events {
    worker_connections  1024;
    use epoll;
}


http {
    passenger_root /home/marco/.rvm/gems/ruby-2.1.2/gems/passenger-4.0.45;  #passenger的路径,默认就有,一般不用改
    passenger_ruby /home/marco/.rvm/gems/ruby-2.1.2/wrappers/ruby;   #ruby的路径,也是默认就有
    passenger_default_user root;
    passenger_max_pool_size 16;
    
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    tcp_nopush     on;

    keepalive_timeout  65;

    gzip  on;

    client_max_body_size 2048m
    server {   #一个server对应一个应用
        listen       5000;  #监听的端口号
        server_name  localhost;  #域名,一般可以是localhost
	passenger_enabled on;
	passenger_min_instances 4;
	root /home/marco/rails_porject/ipall/public;  #指向rails应用的public目录
	rails_env production;
    }

}

启动以后就可以访问了。


值得注意的几个问题。有些人可以回想要新建一个rails目录直接测试,这样的情况会出现502。因为新建的项目不完整,passenger没办法得到项目的回应。最后使用相对完整的项目来测试。

还有值得注意的地方就是配置的时候记得在rails工程目录里的/config/database.yml中设置好rails项目的production环境下的数据库。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值