13

我最初在 serverfault.com 上发布了一个与此问题相关的问题:https ://serverfault.com/questions/152587/apache-mod-proxy-to-another-server

从那以后,我意识到这不是我的服务器设置的问题,而是我的 rails 应用程序的问题。我已经在服务器方面设置了这个应用程序,与我在同一台服务器上运行的另一个正常运行的 rails 应用程序完全相同。当我启动服务器时,我的 mongrel.log 如下所示:

** Daemonized, any open files are closed.  Look at /var/www/osuwebdev/tmp/pids/mongrel.pid and log/mongrel.log for info.
** Starting Mongrel listening at 0.0.0.0:8080
** Starting Rails with production environment...
** Rails loaded.
** Loading any Rails specific GemPlugins
** Signals ready.  TERM => stop.  USR2 => restart.  INT => stop (no restart).
** Rails signals registered.  HUP => reload (without restart).  It might not work well.
** Mongrel 1.1.5 available at 0.0.0.0:8080
** Writing PID file to /var/www/osuwebdev/tmp/pids/mongrel.pid

当我加载一个页面时,它会在日志中弹出:

Wed Jun 30 19:46:10 +0000 2010: Error calling Dispatcher.dispatch #<NoMethodError: undefined method `[]' for nil:NilClass>
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/cgi.rb:108:in `send_cookies'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/cgi.rb:136:in `out'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/http_response.rb:65:in `start'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/cgi.rb:135:in `out'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/rails.rb:81:in `process'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:159:in `process_client'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:158:in `each'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:158:in `process_client'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:285:in `run'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:285:in `initialize'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:285:in `new'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:285:in `run'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:268:in `initialize'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:268:in `new'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel.rb:268:in `run'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:282:in `run'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:281:in `each'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:281:in `run'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:128:in `run'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/command.rb:212:in `run'
/var/lib/gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:281
/usr/local/bin/mongrel_rails:19:in `load'
/usr/local/bin/mongrel_rails:19

我无法弄清楚这个应用程序有什么不同可能导致这个问题。

4

3 回答 3

3

我相信这是 Rack、Mongrel 和 Rails 中错误的奇怪组合。

  1. 将此 ruby​​ 代码保存在您的应用程序中:http config/mongrel.rb: //gist.github.com/471663

  2. 在您的config/environment.rb, 在文件的最后添加: require File.join(File.dirname(File.expand_path(FILE)), 'mongrel')

  3. 在同一个文件的 Rails::initializer.run 块中添加这一行: config.gem "mongrel"

此处对问题的更长解释:https ://rails.lighthouseapp.com/projects/8994/tickets/4690-mongrel-doesnt-work-with-rails-238

这绝对适用于 Rails 2.3.8 应用程序,尽管我对其进行的修补与上述略有不同。

于 2011-12-17T09:09:15.803 回答
0

通常是读取配置文件的 yaml 文件失败。它设置了一个配置对象来从中获取值,并且您的环境的 yaml 文件中的条目不存在,因此该对象为零。

您是否正在运行任何具有可能未设置用于开发的 yaml 文件的 gem?

我不知道为什么回到 2.3.5 会有所帮助 - 可能是它以不同的顺序加载内容并且配置信息可用。

于 2011-05-25T10:19:46.907 回答
0

您在后续的 GET 请求中仍然看到问题吗?我有一个类似的问题,我的 Rails 应用程序可以在 WEBrick 下正常运行,但不能在 Mongrel 下运行,但在 Internet 上的某个地方发现(这里有一个显示类似版本问题的链接)旧版本的 Mongrel 错误处理了对页面的第一个请求但是处理后续请求ok。

我们提出的解决方法是,每当我们启动应用程序时,我们都会在curl应用程序上执行 GET 以“启动”Mongrel。

于 2010-06-30T23:45:04.023 回答