Redmine stealthプラグインという、簡単にメール送信をON・OFFできるプラグインがあります。こいつはその場でON・OFFの変更ができるので、誤字修正時とかにメール飛ばしたくないとかいう場合に非常に便利なのです。
が…どうも2.x系の途中から本体のバージョンアップに追随できていないようで3.3.1ではインストール時にエラーがでました。

以前使っていた時は2.5.2で、その時は確か修正せずに使用できたので、それ以降のバージョンでの変更で使用できなくなってます。正確なバージョンはRedmine本体のチケット & リリース情報を確認すればわかると思いますが、めんどくさいのでやってません。

以下、エラー内容とかダラダラ書いてますが、修正箇所と結論見たい方は最後の方どうぞ。

目次

  1. エラーと原因
  2. どうする & どうしたか
  3. 修正箇所
  4. その他
    1. 追記

エラーと原因


まず、pluginのmigrate実行時のエラーメッセージはこんな感じ。

1
2
3
4
5
6
7
rake aborted!
TypeError: no implicit conversion of nil into String
/usr/src/app/redmine/plugins/redmine_stealth/init.rb:24:in `join'
/usr/src/app/redmine/plugins/redmine_stealth/init.rb:24:in `block in <top (required)>'
/usr/src/app/redmine/lib/redmine/plugin.rb:75:in `instance_eval'

/usr/src/app/redmine/lib/redmine/plugin.rb:75:in `register'
...省略

で、init.rbを見ると該当箇所はこんな感じ。

1
2
3
4
plugin_locale_glob = respond_to?(:directory) ? 
File.join(directory, 'config', 'locales', '*.yml') :
File.join(Rails.root, 'vendor', 'plugins',
'redmine_stealth', 'config', 'locales', '*.yml')

エラーメッセージとコードをみた感じ、言語ファイルが上手く取得できてないんでしょう。たぶん。
RubyもRailsもわかんないけど。たぶん。

ちなみに、プラグインのリポジトリを見るとわかる通り、4年くらいメンテされてないです。今回のエラーのIssueも起票されていますが、どうももうメンテする兆しは見えません。

どうする & どうしたか


原因はわかったものの、どうするか…RubyもRailsもわからんし~
なのですが、GitHubが便利というか、世界の皆さん素晴らしいといいますか、今回の件に限らず自分が遭遇したエラーって大体解決策(代替案)が書いてあるか、誰かが修正してはります。

今回も幸いにも、Forkしてる人がそこそこいらっしゃいます。その中から修正している人を見つけて、その通りに修正したらちゃんと動きました。(nodecarter さん感謝!)

修正箇所


前述の通り、本家が修正する見込みがなさそうなので、私もForkして修正しました。
前述のリンク先(nodecarter さんの修正)を見れば修正箇所はわかりますが、せっかくなので画像込みで張っときます。

プラグインのルートディレクトリのinit.rbの赤の個所を次のコードに変更します。

1
plugin_locale_glob = File.join(File.dirname(__FILE__), 'config', 'locales', '*.yml')

これでちゃんとインストールできました!

その他


と、あたかも解決したかのように書いてますが、実はメール送信をまだやってないので本当にON・OFFができるかどうかまで確認できてません。
確認できたら、追記しようと思います。

追記

2016/12/2

Redmine3.3.1で前述の修正で正常に動くことを確認できました。