Как получить доступ к методу пространства имен в консоли Ruby? - PullRequest
2 голосов
/ 24 января 2012

Нашел этот пост Включить пространство имен в консоль 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 ]

4 голосов
/ 09 мая 2012

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

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

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

3 голосов
/ 24 января 2012

Вы путаете два разных типа «пространств имен» - модули 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]
...