Странная проблема с Rails-приложением и Mongrel - PullRequest
13 голосов
/ 30 июня 2010

Первоначально я опубликовал вопрос, касающийся этой проблемы, на 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

Я не могу понять, в чем отличиеоб этом приложении, которое может вызвать эту проблему.

Ответы [ 3 ]

3 голосов
/ 17 декабря 2011

Я считаю, что это странная комбинация ошибок в Rack, Mongrel и Rails.

  1. Сохраните этот код рубина в вашем приложении на config/mongrel.rb: http://gist.github.com/471663

  2. В вашем config/environment.rb в самом конце файла добавьте: require File.join(File.dirname(File.expand_path(FILE)), 'mongrel')

  3. В этот же файл добавьте эту строку в Rails :: initializer.блок выполнения: config.gem "mongrel"

Более подробное объяснение проблемы здесь: https://rails.lighthouseapp.com/projects/8994/tickets/4690-mongrel-doesnt-work-with-rails-238

Это определенно сработало для приложения Rails 2.3.8, хотя я исправил егонемного отличается от описанного выше.

0 голосов
/ 25 мая 2011

Это обычно ошибка чтения файла yaml для конфигурации. Он настроил объект конфигурации для получения значений, а запись в файле yaml для вашей среды отсутствует, поэтому объект равен nil.

Запускаете ли вы какие-либо гемы с файлом yaml, который, возможно, не настроен для разработки?

Я не знаю, почему может помочь возврат к 2.3.5 - возможно, он загружает вещи в другом порядке и информация о конфигурации доступна.

0 голосов
/ 01 июля 2010

Вы все еще видите проблему при последующих запросах GET? У меня была похожая проблема, когда мое приложение Rails нормально работало под WEBrick, но не под Mongrel, но нашло где-то в интернете ( здесь ссылка , которая показывает похожую версию проблемы), что более старые версии Mongrel неправильно обрабатывают первый запрос к странице, но обработать последующие запросы нормально.

Обходной путь, который мы использовали, заключался в том, что всякий раз, когда мы запускали приложение, мы curl выполняли GET для приложения, чтобы «заправить» Mongrel.

...