Tomcat обрабатывает запросы для приложения JRuby on Rails до полной загрузки приложения - PullRequest
3 голосов
/ 09 ноября 2010

У меня есть пограничный случай, хотя он очень заметен клиенту, когда Tomcat начинает обрабатывать запросы до того, как все зависимости будут правильно загружены для стека Ruby on Rails, работающего под JRuby.

После перезапуска Tomcat происходит нечто подобное:

undefined method `utc_offset' for nil:NilClass
 [RAILS_ROOT]/gems/gems/activesupport-2.3.8/lib/active_support/values/time_zone.rb:206:in `<=>'

Это происходит, когда на одном из моих сервисов вызывается следующий код:

  @timezones = ActiveSupport::TimeZone.all

Если вы подождете еще несколько секунд и обновите запрашивающую страницу, она без проблем загрузится.

Есть ли способ гарантировать, что Tomcat не начнет обрабатывать эти запросы, пока не будет загружен весь стек, ActiveSupport, ActiveRecord и т. Д.? Кто-нибудь испытывал подобные симптомы?

Ответы [ 2 ]

1 голос
/ 10 ноября 2010

Это звучит как возможная ошибка в JRuby-Rack, если предположить, что это то, что вы используете для запуска приложения Rails в Tomcat. Предполагается, что JRuby-Rack загружает весь config / environment.rb до того, как он будет обрабатывать запросы, поэтому я не уверен, как это будет с вами, но, возможно, я что-то упустил. Не могли бы вы поделиться еще некоторыми данными (или, возможно, кодом или приложением, которое воспроизводит проблему) о том, как вы вызвали ошибку в http://kenai.com/jira/browse/JRUBY_RACK или http://bugs.jruby.org?

0 голосов
/ 09 ноября 2010

Я не уверен, есть ли что-то подобное в Tomcat напрямую, но вы можете написать javax.servlet.Filter, который будет перехватывать все запросы и отклонять их до тех пор, пока ваше приложение не загрузится. Когда приложение полностью загружено, вы просите фильтр прекратить отклонять запросы. (Это не чистое решение Ruby).

...