【问题标题】:I18n::InvalidLocaleData: can not load translations with sidekiq and jrubyI18n::InvalidLocaleData:无法使用 sidekiq 和 jruby 加载翻译
【发布时间】:2016-05-12 19:12:07
【问题描述】:

我有 jruby-9.0.5.0 设置,我尝试使用 sidekiq 进行一些并行处理。一切正常,除了如果我使用超过 12 个 sidekiq 线程,我不断收到以下错误消息:

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 ruby​​ 时有效,当我切换到 jruby 时问题就开始了。

【问题讨论】:

    标签: multithreading jruby sidekiq rails-i18n jrubyonrails


    【解决方案1】:

    将此行放入初始化程序中,看看它是否解决了问题,它应该在多个线程启动之前预先加载翻译:

    I18n.t(".")
    

    【讨论】:

    • 我确实尝试过,但奇怪的是 I18n.backend.initialized?当我在初始化程序中调用 I18n.t(".") 时仍然返回 false
    • 这可能与 jruby 有关,因为它在我使用 MRI 时有效。并感谢 sidekiq 顺便说一句;-)
    • 我现在设法让它“工作”了。我认为这与 I18n 后端的延迟加载有关。为了使其正常工作,我创建了一个仅执行 I18n.t(".") 的 sidekiq 工作人员,之后,我可以启动任意数量的工作人员,并且不会发生异常。
    猜你喜欢
    • 1970-01-01
    • 2014-10-07
    • 2020-10-31
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    相关资源
    最近更新 更多