2012-01-24 111 views
2

找到这个职位Include namespace in Rails 3.1 console但它似乎没有工作。如何访问Ruby控制台中的命名空间方法?

定义了以下lib /任务,它可以从命令行运行:rake namespace_name:task_name

如何在控制台内调用方法method_namenamespace_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。

+1

不是100%确定你正在尝试做什么,而是考虑使用[rake-sh](https://github.com/jugyo/rake-sh)来代替。 –

回答

4

如果您想调用.rake文件中定义的方法,您可以执行类似于@Nate所说的操作,但不要调用raketask,请调用该方法:

​​

感觉有点奇怪,你不需要指定命名空间,但我只是试过这个,它的工作。

+0

'Rake.load'和'load'有什么区别? –

3

您混淆了两种不同的“名称空间” - Ruby模块可以执行“namespacing”Ruby代码的任务; Rake命名空间仅用于Rake内部对任务进行分类,并且不会创建模块名称空间。

您链接的页面仅适用于Ruby模块名称空间。

如果你想从Rails的控制台调用Rake任务,它更多地参与了一下......

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

或者只是把它叫做命令行从Rails的控制台内 -

%x[rake namespace_name:task_name] 
+0

要求“rake”返回“nil”。 Rake.load_rakefile会抛出'NoMethodError:undefined方法'load_rakefile'for Rake:Module' –

+0

另外,我想在名称空间内调用***方法***,而不是使用rake任务***。 –

+0

此外,您发布的第一行运行Rake任务 - “rake namespace_name:method_name”实际上是'rake namespace:task'。在封面下可能会调用'namespace:method',但不能保证 - 你能发布rake任务文件的内容吗? – Nate