Как получить доступ к методу пространства имен в консоли Ruby?

Нашел этот пост Включение пространства имен в консоль Rails 3.1, но, похоже, оно не работает.

Определена следующая lib/task, и она работает из командной строки: rake namespace_name:task_name,

Как вызвать метод method_name в namespace_name из консоли, без вызова задачи?

rails console
namespace_name::task_name
NameError: undefined local variable or method 'namespace_name' for main:Object

irb namespace_name
NameError: undefined local variable or method 'namespace_name' for main:Object

Работаю в Rails 3.07, Ubuntu.

2 ответа

Решение

Если вы хотите вызвать метод, определенный внутри .rake В файле вы делаете нечто похожее на то, что сказал @Nate, но вместо вызова raketask вызовите метод:

require 'rake'
Rake.load_rakefile 'lib/tasks/namespace_name.rake'
method_name(arg1, arg2)

Кажется странным, что вам не нужно указывать пространства имен, но я только что попробовал это, и это сработало.

Вы путаете два разных типа "пространств имен" - модули Ruby могут выполнять задачу "пространства имен" кода Ruby; Пространства имен Rake используются в Rake только для классификации задач, и они не создают пространство имен модуля.

Страница, на которую вы ссылаетесь, работает только с пространствами имен модулей Ruby.

Если вы хотите вызывать задачи Rake из консоли Rails, это немного сложнее...

require 'rake'
Rake.load_rakefile 'lib/tasks/namespace_name.rake'
Rake::Task['namespace_name:task_name'].invoke

Или просто вызовите его в командной строке из консоли Rails -

%x[rake namespace_name:task_name]
Другие вопросы по тегам