我使用 Apache + Passenger(= Mod Rails)、MySQL 和 Acts_As_Ferret(在服务器模式下)运行 Ubuntu 8.04 共享主机(VMWare)。第一次请求太慢了。我对它做了很多 REST 操作,但用户很少。
现在我想做一个全新的安装......
对于真正快速的 RoR 服务器,您推荐哪种设置(基于 Ubuntu)?(例如 Ngnix、Thin、Mongrels 或其他花哨的东西)
我使用 Apache + Passenger(= Mod Rails)、MySQL 和 Acts_As_Ferret(在服务器模式下)运行 Ubuntu 8.04 共享主机(VMWare)。第一次请求太慢了。我对它做了很多 REST 操作,但用户很少。
现在我想做一个全新的安装......
对于真正快速的 RoR 服务器,您推荐哪种设置(基于 Ubuntu)?(例如 Ngnix、Thin、Mongrels 或其他花哨的东西)
乘客在第一次请求时很慢,因为它处于空闲状态并且它关闭了所有 rails 进程,因此第一个请求必须加载 rails 进程。您需要定期 ping 以避免它空闲和关闭 rails 进程,或者将空闲超时设置为高值。
查看 RailsPoolIdleTime 的文档
好吧,您可以通过切换到 Ubuntu 9.04 甚至 8.10 来大幅提升速度
检查 ec2onrails 邮件列表,其中有很多关于各种瘦/nginx/passenger/apache 替代方案和排列的讨论,以及基于一些体面测试发布的一些硬数据。
您还会发现一个很好的打包 RoR/Ubuntu 堆栈,其形状为 ec2onrails 映像(google ec2onrails)——它用于在亚马逊 EC2 云上运行,但其中有很多好东西 + capistrano 任务。目前它基于 apache,但正在进行的版本正在寻找替代方案。没有理由您不能对非 EC2 服务器使用相同的构建脚本。
如果您的问题只是最初的请求,请在考虑将其上线之前尝试预热您的服务器(例如,通过运行脚本来自动执行基本操作)。
哦,我应该补充一下 - 你确定问题出在你的堆栈上吗?更有可能是您的代码。可能值得先看看瓶颈在哪里,以及从缓存、改进的查询和索引,尤其是在调整其他任何内容之前的 memcached 中可以得到什么。
我个人在我的 ubuntu 堆栈上使用 nginx+passenger。并使用狮身人面像代替雪貂