2010-11-09 76 views
3

我有一個邊緣案例,儘管它是一個非常客戶可見的案例,Tomcat在所有依賴關係正確加載之前開始處理請求,以便在下面運行的Ruby on Rails堆棧JRuby的。Tomcat在應用程序完全加載之前正在處理對JRuby 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等之前不會開始處理這些請求?有沒有人遇到類似的症狀?

回答

1

這聽起來像是JRuby-Rack中的一個可能的錯誤,假設您正在使用Tomcat運行Rails應用程序。 JRuby-Rack應該在處理請求之前加載整個config/environment.rb,所以我不確定這會發生在你身上,但也許我忽略了一些東西。你可以分享一些更多的數據(或者代碼或者重現問題的應用程序)嗎?你是如何引發錯誤的?http://kenai.com/jira/browse/JRUBY_RACKhttp://bugs.jruby.org

+0

嗨,尼克。我將繼續並按照您的建議打開一個錯誤。我確實使用Tomcat作爲我的應用程序服務器。我們明確地要求environment.rb中的active_support,並且這仍然會發生。獨立的應用程序可能是可能的,但很難複製。這是一個巨大的應用程序(可能是其中一個較大的JRuby應用程序)。我希望能夠通過更多信息與您離線聯繫,如果我們找到答案,最終回到這裏來發布答案。 – randombits 2010-11-10 14:50:38

0

我不確定在Tomcat中是否有類似的東西,但是你可以編寫一個javax.servlet.Filter來攔截所有的請求,並在你的應用程序加載之前拒絕它們。當應用程序被完全加載時,您要求過濾器停止拒絕請求。 (儘管這不是純粹的Ruby解決方案)。

相關問題