这里默认环境为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环境下的数据库。