Rails4でtd-loggerが動かない原因
ログ収集処理をfluentdに統一しようと思ってbundleでtd-loggerを入れてみたのだが、Rail4のサーバが起動し無くなった。
エラーメッセージは下記。
/home/ahinore/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails.rb:32:in `configuration': undefined method `config' for nil:NilClass (NoMethodError)
from /home/ahinore/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/td-logger-0.3.21/lib/td/logger/agent/rails.rb:50:in `<module:Rails>'
from /home/ahinore/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/td-logger-0.3.21/lib/td/logger/agent/rails.rb:3:in `<module:Logger>'
from /home/ahinore/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/td-logger-0.3.21/lib/td/logger/agent/rails.rb:2:in `<module:TreasureData>'
from /home/ahinore/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/td-logger-0.3.21/lib/td/logger/agent/rails.rb:1:in `<top (required)>'
from /home/ahinore/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/td-logger-0.3.21/lib/td/logger.rb:98:in `require'
from /home/ahinore/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/td-logger-0.3.21/lib/td/logger.rb:98:in `<module:Agent>'
from /home/ahinore/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/td-logger-0.3.21/lib/td/logger.rb:96:in `<top (required)>'
from /home/ahinore/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/td-logger-0.3.21/lib/td-logger.rb:1:in `require'
from /home/ahinore/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/td-logger-0.3.21/lib/td-logger.rb:1:in `<top (required)>'
td-loggerの 周辺のソースを読んでみた所、どうも「td-logger-0.3.21/lib/td/logger/agent/rails.rb:43」の所で、初期化方法がRailsのバージョン3とそれ以外で切り替えているのだが、Rail4はそれ以外に含まれてしまっている模様。
下記のようにRails4も3と同じ初期化方法になる様に修正してみた所、うまく動くようになった。
- if ::Rails.respond_to?(:version) && ::Rails.version =~ /^3/
+ if ::Rails.respond_to?(:version) && ::Rails.version =~ /^[34]/
めでたしめでたし。