我们一直在为学校期末项目开发一个小型的 Ruby On Rails(ruby 1.8、rails 3.0.1)系统;在开发过程中,我们一直在混合使用我们的开发机器和 LAN 上的 Linux 服务器(运行 WEBrick)进行测试。对于部署,我们获得了一个运行 Debian squeeze/sid 的 VPS,以及自由的部署选项(换句话说:“自己想办法” :))。
该网站的流量不会很大,因此运行 WEBrick 部署可能会有效 - 但感觉不对,考虑到这是一个学习项目,我们希望至少半正确地做一些事情。另外,我们需要 gzip 压缩因为 rails 应用程序的一部分是 json webservice,它将提供适量的数据 - 据我所知,ruby 服务器通常不支持这一点。
过去几天,我一直在谷歌上搜索各种选项,哇,竟然有这么多!我唯一先排除的是 Apache,主要是因为我想尝试一些新的东西,部分是因为它感觉有点...笨重的。
我现在正在调查切诺基+薄的,这似乎不错,但如果有更合适的,我非常乐意听取建议。我碰到过 lighttpd、hiawata 和 nginx 服务器,也看到过 mongrel、passenger 和 unicorn ruby 服务器的提及 - 肯定有很多可能的排列组合!
为了测试,我们目前设置了 SSH 隧道并使用 etc/hosts 来映射应用程序名称.local改为 127.0.0.1 - 注册正确的域名和在防火墙上打洞将在稍后进行。这主要意味着 httpd 在端口 80 上运行,但由于 SSH 隧道,Host:
HTTP 请求标头的一部分包含隧道端口号。
为了将这些胡言乱语变成合适的帖子,这里有一些问题:
- 在另一个 httpd“前端”后面使用 Thin ruby 服务器时,单个实例是否可以处理(无需排队)多个并发 rails 请求,还是只能在用作前端时才可以这样做?我们应该在不同的端口上使用它们的池吗?
- 我们目前将 rails 应用程序放在 /var/rails/ 中应用程序名称以及符号链接 /var/rails/应用程序名称/public 到 /var/www/应用程序名称,并将所有所有权归于
www-data
。这种布局合理吗? - 系统中存在一些框架控制的 302 重定向,尤其是用户授权。直接连接到 WEBrick 或 Thin 时,一切如预期。通过 Cherokee 连接时,出于某种原因,隧道端口号会从响应
Location:
标头中删除。知道为什么会发生这种情况吗? - 每当切诺基重新启动时,第一的向 rails 应用发出的请求出现“502 bad gateway”HTTP 错误,可能是因为 Thin 服务器是按需启动的。有什么方法可以消除这个初始 502 错误吗?