Nginx + Passenger + Rails

最近开发一个 Rails 项目,项目 Demo 已经初步完成,需要部署到服务器。平时都是使用 Rails 自带 WebBrick, 或者使用 thin,很少配置 production 环境的。今天实践了一遍,虽然也遇到了几个坑,过程还算顺利。

相关软件版本

  • Ubuntu Server 14.04
  • Ruby 2.0.0-p481
  • Passenger 4.0.46

总体步骤

  • 安装 Passenger
  • 安装 Nginx
  • 配置 Nginx

安装 Passenger

gem install passenger

安装 Nginx

不可以使用官方的 Nginx,为跟 Passenger 集成,需要单独设置编译。不过你不用为“设置” “编译”苦恼,因为已经有编译安装脚本。

rvmsudo passenger-install-nginx-modul

按着提示内容进行选择就行,我的原则就是“能默认就默认”,一路回车就好。

编译可能需要一段时间,大约几分钟吧。

安装命令

在这里我就遇到了一个坑,本来现在就能打 Nginx 就能看到默认页面了。

sudo service nginx start

or

sudo /etc/init.d/nginx stop

但是输入以上命令,不能启用 Nginx,提示类似 “no service named nginx"

不问为什么,但求结果,google了一下,找到了解决方式。

wget -O init-deb.sh http://library.linode.com/assets/660-init-deb.sh
sudo mv init-deb.sh /etc/init.d/nginx
sudo chmod +x /etc/init.d/nginx
sudo /usr/sbin/update-rc.d -f nginx defaults

现在就能通过命令控制 Nginx 了

sudo /etc/init.d/nginx stop
sudo /etc/init.d/nginx start
sudo /etc/init.d/nginx restart

配置 Nginx

sudo v /opt/nginx/conf/nginx.conf

配置倒是很简洁,主要是因为我要求也简单,能用即可:)

server {
  listen 80;
  server_name localhost;
  passenger_enabled on;
  root /path/to/your_app/public;
}

具体为什么指向 public 页面,我也不知道。重要的是it works