找到解决方案!
这似乎是特定于 Mongrel + Rails 2.3.8 的错误,Rails + cPanel 使用的网络服务器。这就是为什么它只在您从 cPanel 运行应用程序时出现,而不是在通过脚本/服务器在本地提供它时出现。
有关更多详细信息,请参阅: https ://rails.lighthouseapp.com/projects/8994/tickets/4690-mongrel-doesnt-work-with-rails-238
最终找到的解决方法是将以下文件放入每个新 Rails 2.3.8 应用程序的 /config/initializers 目录中:
https://gist.github.com/471663
添加此初始化程序后,我的 Rails 应用程序将按预期运行。
原始问题:
我已经阅读了 railsforzombies.org 上非常有用的教程,现在准备开始测试 RoR 安装。我的网站位于使用 cPanel 的共享主机上。我已经使用 cPanel 创建了测试应用程序,它设置在 ~/rails_apps/blog。我创建了一个重写,将 mydomain.com/testblog/ 重定向到 mydomain.com:12002,这是 cPanel 运行我的 RoR 应用程序的端口。我还在开发模式下通过 cPanel 启动了应用程序。
如果我访问 mydomain.com/testblog/,我会看到有用的页面,让我知道我的 RoR 应用程序已创建并且正在运行。太好了,对吧?嗯,没那么快。
我正在按照guides.rubyonrails.org/v2.3.8/getting_started.html 上的入门指南进行操作,然后进入第4 步。我script/generate controller home index
在app/views/home/index 中运行并编辑了结果视图。 html.erb。这只是一个简单的
<h1>Hello rails!</h1>
但是,当我访问 mydomain.com/testblog/home/index(带有或不带有尾随的“/”)时,我在浏览器中看到一个空白页面,什么都没有(查看源代码什么都没有显示)。
为了确保我不会发疯,我将一个文本文件放在我的 rails 应用程序的 /public 目录中,当我转到 mydomain.com/testblog/test.txt 时,它会得到正确的服务。所以我知道来自 cPanel 的 Apache 重写工作正常。
有任何想法吗?我想我忽略了一些明显的东西,但我现在画的是空白。
作为参考,我在 cPanel 11、Ruby 1.8.7 和 Rails 2.3.8 上运行。我很想运行 Rails 3.0,但共享主机说现在不行。
编辑添加:
生成上面的主控制器和索引操作将以下行添加到我的 routes.rb 文件中(我已经检查过,它们在那里):
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
所以 mydomain.com/testblog/home/index 应该映射到 app/views/home/index.html.erb。
再次编辑更多调查细节:
我发现了一些可能对此有所启发的东西。如果我在 cPanel 中停止 rails 应用程序,然后通过 PuTTY 登录并启动开发服务器script/server
并执行
curl http://0.0.0.0:3000/home/index
开发服务器确实响应
<h1>Hello Rails!</h1>
从app/views/home/index.html.erb
. 所以它在那里工作。当我在 cPanel 中启动 Rails 应用程序(告诉我它在端口 12002 上运行)时,我从 mydomain.com/testblog/home/index 得到一个空响应。我也得到了一个空洞的回应
curl http://0.0.0.0:12002
如果我通过服务器上的 SSH 运行它。所以它看起来像 cPanel 的问题,而不是 Rails。