Я вижу, что пространства имен для задач rake служат той же цели, что и каталоги в файловой системе: они касаются организации, а не инкапсуляции.Вот почему задачи базы данных находятся в db:
, задачи Rails в rails:
и т. Д.
Пространства имен Rake не являются классами, поэтому вам нужно спросить себя, к какому классу вы добавляете test_method
, когда определяете егов пространстве имен Rake.Ответ - Объект.Итак, когда вы выполняете вторую задачу, у Object уже есть метод test_method
, который принимает один параметр, и Руби справедливо жалуется.
Лучшее решение - сделать ваши задачи Rake очень тонкими (как контроллеры) и поместитьлюбые вспомогательные методы (такие как test_method
) отключены в каком-либо файле библиотеки где-нибудь разумным.Задача Rake обычно должна просто выполнить небольшую настройку, а затем вызвать метод библиотеки, чтобы выполнить реальную работу (т. Е. Тот же общий макет, что и у контроллера).
Резюме: сложите всю реальную работу и тяжелыйподнимите где-нибудь в вашей библиотеке файлы и сделайте ваши задачи Rake тонкими обертками для ваших библиотек.Это должно устранить вашу проблему благодаря правильной организации кода.