Phusion Passenger 是什么?
- 开始被设计成 Apache 的 module,用来部署 Ruby on Rails,叫
mod_rails
- 后来不断发展成独立的 Ruby Web Server,改名
Passenger
下面是关于 Passenger 的一些历史。
Sinatra 是一个基于 Ruby 的 DSL,方便开发者快速创建 Web 应用。官方文档里有更详细的说明。
Hello Sinatra
- 安装 rvm
$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 |
- 安装 Ruby
$ rvm install 2.3.3 |
- 安装 Sinatra
$ gem install sinatra |
- 码一段代码
$ vi hello_sinatra.rb |
require 'sinatra' |
- 测试
$ ruby hello_sinatra.rb |
访问 http://localhost:4567,能看到输出Hello, Sinatra
。
配置 Apache 和 Passenger
安装 Apache
$ sudo apt-get install apache2 |
安装 Passenger
relevant integration mode
- Apache
- Passenger open source
operating system / installation method
- Debian, Ubuntu (With APT)
- Ubuntu 16.04 LTS (Xenial)
# Step 1: install Passenger packages |
Sinatra 部署文件夹
在/var/www
下,新建hello-sinatra
文件夹,结构如下。
hello-sinatra/ |
文件hello.rb
的内容为
require 'sinatra/base' |
文件config.ru
的内容为
require File.expand_path('../hello.rb', __FILE__) |
配置 Apache 的 vhost
从/etc/apache2/sites-available
里拷贝一份默认的 vhost 模板。
$ sudo cp 000-default.conf hello-sinatra.conf |
在/etc/apache2/sites-enabled
下,新建一个符号链接到hello-sinatra.conf
。
$ sudo ln -s ../sites-available/hello-sinatra.conf . |
<VirtualHost *:80> |
两点注意:
DocumentRoot
和Directory
里的路径要写到public
文件夹PassengerRuby
的值,通过下面的命令查看
$ passenger-config about ruby-command |
重启 Apache 服务。
$ sudo service apache2 restart |
测试
浏览器访问服务器地址,显示的是 Apache 默认的欢迎页面(文件位置在/var/www/html/index.html
)。
这是由于000-default.conf
和hello-sinatra.conf
配置了不同的DocumentRoot
,但没配置不同的ServerName
。
vhost配置文件 | ServerName | DocumentRoot |
---|---|---|
000-default.conf | 无 | /var/www/html |
hello-sinatra.conf | 无 | /var/www/hello-sinatra |
更多关于 Apache Name-based Virtual Hosts 的内容,可以阅读官方文档。
测试用的虚拟机没有域名绑定,所以简单的直接禁用掉默认 site 就好。
$ sudo a2dissite 000-default |
重新加载或重启 Apache 服务使配置生效。
一个错误
查看 Apache 的日志文件/var/log/apache2/error.log
,刚才的访问会输出如下错误。
App 9888 stdout: |
看起来像是目录权限问题,修改/var/www/hello-sinatra
文件夹的 owner 成当前用户。
$ sudo chown -R aaron67:aaron67 /var/www/hello-sinatra/ |
重启服务,搞定。