Rails I18n随机加载错误的语言环境

时间:2015-11-19 14:31:27

标签: ruby-on-rails sidekiq rails-i18n

Rails应用程序使用I18n。用户将使用英语网站,该网站将以西班牙语随机加载。

应用程序仅在两个地方切换区域设置。

  1. application.rb有一个根据域名切换区域设置的方法。
  2. 有一个邮件程序使用with_locale方法根据收件人的区域设置切换区域设置。这样做是因为主要区域设置为英语的用户可以向主要区域设置为西班牙语的用户发送消息。
  3. 以下是邮件通知的邮件程序方法:

     class Notifier < ActionMailer::Base
        def message_notification(message_id, recipient_id)
            @message = Message.find(message_id)
            @recipient = @user = User.find(recipient_id)
    
            I18n.with_locale(@recipient.locale) do
              mail(
                to: @recipient.email,
                subject: I18n.t('app.new_message.subject',
                name: @message.sender.name),
                from: I18n.t('app.notifier.from')
                ) do |format|
                  format.html { render layout: 'notifier-single' }
              end
            end
          end
       end
    

    该应用程序使用Sidekiq与Redis处理延迟的作业。所以,上面的方法是这样推迟的:

    Notifier.delay.message_notification(self.id, recipient.id)
    

    我想知道Sidekiq处理线程的方式是否会导致这种情况。

    有什么想法吗?

    更新

    来自Sidekiq维基的这个页面: https://github.com/mperham/sidekiq/wiki/Problems-and-Troubleshooting

    &#34; aws-sdk(根据讨论组中的一个老帖子,这个gem是线程安全的,除了使用自动加载。这里有更多细节。在初始化期间明确调用AWS.eager_autoload!允许它与Sidekiq)一起使用&#34;

    该应用程序使用Amazon SES通过aws-sdk gem发送邮件。

    我将AWS.eager_autoload!添加到初始化程序中。我会观察并查看问题是否仍然存在(我还没有找到复制或测试方法)。这就是说我不确定这是否相关所以任何建议都会受到赞赏。

0 个答案:

没有答案