gettext/utils があると rake doc:app が失敗する
気づいたら rake doc:app が失敗するようになっていた。
$ rake doc:app rm -r doc/app rake aborted! uninitialized constant AlreadyDefinedToken (See full trace by running task with --trace)
調べてみると lib/tasks/gettext.rake に gettext 用のタスクを置いたあたりから失敗するようになってる。
gettext.rake の中身は ruby-gettext-howto-ror#Rakefile にならってこんな感じ。
require 'gettext/utils' namespace :gettext do desc "Update pot/po files." task :updatepo do files = Dir.glob("{app,config,components,lib}/**/*.{rb,rhtml,rxml,rjs}").sort GetText.update_pofiles("foobar", files, "foobar 1.0.0") end desc "Create mo-files" task :makemo do GetText.create_mofiles(true, "po", "locale") end end task :updatepo => "gettext:updatepo" task :makemo => "gettext:makemo"
失敗する最小構成を作ってみると以下のように。
$ rails -q rails-gettext $ cd rails-gettext/ $ echo "require 'gettext/utils'" >lib/tasks/gettext.rake $ rake doc:app rm -r doc/app rake aborted! uninitialized constant AlreadyDefinedToken (See full trace by running task with --trace)
どうも require 'gettext/utils' と rdoc 系のタスクは共存できないようです…。
しかたないので gettext.rake を次のようにして必要のあるときだけ require 'gettext/utils' するように変更。
namespace :gettext do desc "Update pot/po files." task :updatepo do require 'gettext/utils' files = Dir.glob("{app,config,components,lib}/**/*.{rb,rhtml,rxml,rjs}").sort GetText.update_pofiles("foobar", files, "foobar 1.0.0") end desc "Create mo-files" task :makemo do require 'gettext/utils' GetText.create_mofiles(true, "po", "locale") end end task :updatepo => "gettext:updatepo" task :makemo => "gettext:makemo"
これなら動くようです。
$ rake doc:app rm -r doc/app README_FOR_APP: application.rb: c application_helper.rb: m Generating HTML... Files: 3 Classes: 1 Modules: 1 Methods: 0 Elapsed: 0.145s