Как получить доступ к методу пространства имен в консоли 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]