2016-02-03 46 views
0

我有jruby-9.0.5.0设置,我尝试使用sidekiq做一些并行处理。一切工作正常,但如果我使用超过12个sidekiq线程,我不断收到以下错误信息:I18n :: InvalidLocaleData:无法使用sidekiq和jruby加载翻译

WARN: I18n::InvalidLocaleData: can not load translations from /Users/geroldboehler/.rvm/gems/jruby-9.0.5.0/gems/rails-i18n-4.0.5/lib/rails_i18n/../../rails/locale/ne.yml: java.lang.ArrayIndexOutOfBoundsException 
WARN: /Users/geroldboehler/.rvm/gems/jruby-9.0.5.0/gems/i18n-0.7.0/lib/i18n/backend/base.rb:184:in `load_yml' 

导致此行是:

I18n.t(".") unless I18n.backend.initialized? 
    display_names = I18n.backend.send(:translations)[:de][:shoptwist][:display_names] 

我需要加载存储在翻译yml中的值和第二行会导致异常发生。我完全不知道为什么会发生这种情况,它可能需要做一些同时访问/一些奇怪的多线程问题。

更新

我应该指出,这个工作时,我用MRI红宝石,问题开始时,我切换到JRuby的。

回答

0

把这一行在初始化,看看它是否解决了问题,就应该贪婪加载多个线程之前翻译启动:

I18n.t(".") 
+0

我没有尝试,实际上,但奇怪的是I18n.backend.initialized?在初始化程序中调用I18n.t(“。”)时仍然返回false – Gerold

+0

它可能与jruby有关,因为它在我使用MRI时起作用。并感谢sidekiq btw ;-) – Gerold

+0

我设法让它现在“工作”。我认为它与I18n后端的延迟加载有关。为了使它工作,我创建了一个刚刚完成I18n.t(“。”)的sidekiq工作,之后,我可以根据需要启动尽可能多的工人,并且不会发生异常。 – Gerold