Конфликт пространств имен методов при выполнении задач rake в Rails

Использование Rails 2.3.10 Если моя библиотека lib / tasks выглядит так

lib/tasks
- a.rake
- b.rake

a.rake выглядит так:

namespace :a do
    desc "Task A"
    task(:a=>:environment)do
      msg('I AM TASK A')
    end

    def msg(msg)
      puts "MSG SENT FROM Task A: #{msg}"
    end
end

b.rake выглядит так

namespace :b do
    desc "Task B"
    task(:b=>:environment)do
      msg('I AM TASK B')
    end

    def msg(msg)
      puts "MSG SENT FROM Task B: #{msg}"
    end
end

Затем, когда я запускаю задачу a

rake a RAILS_ENV=sandbox

, вывод «MSG SENT FROM Task B: I AM TASK A»

Таким образом, вспомогательный метод msg (), определенный в a.rake, не вызывается. Скорее вызывается то, что определено в b.rake. (Более того, если у меня есть c.rake - тогда это вспомогательный метод msg вызывается, когда я запускаю задачу a.

Конфликтует ли пространство имен этого метода с известным поведением? Я бы подумал, что размещение имен предотвратило бы это.

Спасибо

13
задан BlogOfSongs 24 August 2011 в 19:55
поделиться