すべてのプロジェクトでモジュールを一度に有効にするために、RedmineRubyアプリで実行する必要のあるRubyコードがいくつかあります。
驚いたことに、rubyはプロジェクトにアクセスしますが、各「プロジェクト」オブジェクト内のいくつかの特定のメソッドにアクセスすると、NoMethodErrorが発生します。
コードは次のとおりです。
Project.find(:all).each do |project|
print "Enabling modules for project '#{project.identifier}' ... "
puts project.methods.sort # this does print "enabled_module_names"
puts project.enabled_module_names
end
これは次の場合に失敗します。
hostname:/srv/apps/redmine# script/runner vendor/plugins/customplugin/lib/enable_modules.rb
/var/lib/gems/1.8/gems/activerecord-2.3.5/lib/active_record/attribute_methods.rb:260:in `method_missing': undefined method `enabled_module_names' for #<Project:0x7f28985c1cb0> (NoMethodError)
from vendor/plugins/customplugin/lib/enable_modules.rb:14
from vendor/plugins/customplugin/lib/enable_modules.rb:7:in `each'
from vendor/plugins/customplugin/lib/enable_modules.rb:7
from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `eval'
from /var/lib/gems/1.8/gems/rails-2.3.5/lib/commands/runner.rb:46
from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require'
from script/runner:3
私は頭を悩ませてきましたが、特に「project.methods」が実際に「enabled_module_names」をリストしているため、コードが「Project」シンボルを検出するのに、その中のメソッドを検出しない理由を理解できません。
どんな助けでも大歓迎です。