Redmine の送信メールの日本語化

王道は RedmineRuby-GetText で、確かにこれで、本文も ISO-2022-JP になるし、ヘッダ部分も ISO-2022-JPMIME エンコードになる。

参考にしたのは下記のサイト。

猫派 |redmine 0.8でメール文字化けの対応しました

で、満足していたのが、突然、奈落のそこに...

きっかけは、パスワードを忘れたユーザが、ログイン画面にある「パスワードの再発行」からメールアドレスを入力をして「変更」ボタンを押したら、Internal Error 発生。

これだけならあまり問題じゃないんだけど、今度はチケットを登録しようとして発生したユーザが現れた。自分が使う分には問題が無かったのと、上記の対策をやった後に追加されたユーザで起きたことから、どうも GetText が怪しい。

で、Rails のログを見ると、

NameError (uninitialized constant GetText::Rails::SecretKeyGenerator):

2つのケースとも上記のログを吐いている。

いやぁ、はっきり言って RailsRuby には全然明るくないし、まともに原因を追うのは絶望的で、GetText はやめちゃおうかと思いながら、問題が発生している場所のソースコード(app/model/token.rb)を凝視。

  def self.generate_token_value
    s = Rails::SecretKeyGenerator.new(object_id).generate_secret
    s[0, 40]
  end

GetText を使うから、「Rails::SecretKeyGenerator」が「GetText::Rails::SecretKeyGenerator」になるのは、なんとなく分かるんだけど、じゃぁ、なんで「GetText::Rails::SecretKeyGenerator」だと「uninitialized constant」になるのかが分からない。

で、「どうせ Rails::SecretKeyGenerator って GetText とは関係ないだろう」と割り切って、「GetText::」が付かないようにする方法がないかなぁ、と思って、

    s = ::Rails::SecretKeyGenerator.new(object_id).generate_secret

としてみた。

ビンゴ!

でも、本当にこの対処が正しいかはよく分からない(^^;