Nginx + passenger 部署 Rails 踩坑

时隔大半年,终于填了这个坑……

去年10月读完《苏东坡传》的时候,就想着做个小的诗词网站,中间因为懒,拖拖拉拉了很久,时隔大半年,算是马马虎虎填了坑,想着,页面丑是丑了些,呃,不管了,先部署了,让它来到这个世界再说。

因为钟情陶潜的《归去来兮辞》,就厚脸皮拿来做了title, 附上站点:归去来兮

这里记录下用 Nginx + passenger 部署时踩的坑。

背景:

Ubuntu 1804, 参考官网给的Installing Passenger + Nginx on Ubuntu 18.04 安装了 Nginx + passenger。

Failed to parse PID

nginx restart 后,执行:

sudo service nginx status

看到报错,显示:

nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument

参考 nginx.service: Failed to read PID from file /run/nginx.pid: Invalid argument, 貌似是Ubuntu的一个bug。

commits 部分给到的解决方法:

mkdir /etc/systemd/system/nginx.service.d
printf "[Service]\nExecStartPost=/bin/sleep 0.1\n" > /etc/systemd/system/nginx.service.d/override.conf
systemctl daemon-reload

「执行 最后一步 daemon-reload时需要输入密码,输入服务器登陆密码即可。」

重启nginx:

sudo service nginx restart
sudo service nginx status

OK.

cannot load such file – bundler/setup

使用 Capistrano deploy 之后,访问网站,报错 500,查看nginx 日志,看到如下的报错信息:

The application encountered the following error: cannot load such file -- bundler/setup (LoadError)

但是 bundler 明明已经安装好,Google 半天,找到的解决方法,有些一言难尽。

后面想了想,安装 passenger 的时候需要设置 passenger_ruby,而我是用 rbenv 安装的ruby,大概是这里出了问题,bingo!

  • 终端执行which ruby, 复制地址

  • 打开 /etc/nginx/conf.d/mod-http-passenger.conf 文件

    找到passenger_ruby /usr/bin/passenger_free_ruby;, 修改 passenger_ruby 为正确的ruby 路径。

重启 nginx,再次访问,OK!

参考

nginx.service: Failed to read PID from file /run/nginx.pid: Invalid argument

Installing Passenger + Nginx on Ubuntu 18.04