在应用程序完全加载之前,Tomcat正在处理JRuby on Rails应用程序的请求

时间:2010-11-09 16:58:33

标签: ruby-on-rails ruby tomcat jruby

我有一个边缘案例,尽管客户可见一个,Tomcat开始处理请求,然后在JRuby下运行的Ruby on Rails堆栈上正确加载所有依赖项。

重新启动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 个答案:

答案 0 :(得分:1)

这听起来像JRuby-Rack中可能存在的错误,假设您正在使用Tomcat中运行Rails应用程序。 JRuby-Rack应该在处理请求之前加载整个config / environment.rb,所以我不确定这会发生在你身上,但也许我忽略了一些东西。您可以分享一些关于如何在http://kenai.com/jira/browse/JRUBY_RACKhttp://bugs.jruby.org引发错误的数据(或者代码或应用程序再现问题)吗?

答案 1 :(得分:0)

我不确定Tomcat中是否存在类似的内容,但您可以编写一个javax.servlet.Filter来拦截所有请求,并在您的应用程序加载之前拒绝它们。当应用程序完全加载时,您要求过滤器停止拒绝请求。 (但这不是纯Ruby解决方案。)