发现这篇文章Include namespace in Rails 3.1 console,但它似乎无效。
定义了以下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。
答案 0 :(得分:4)
如果你想调用.rake
文件中定义的方法,你会做类似于@Nate所说的内容,但是不要调用raketask,而是调用方法:
require 'rake'
Rake.load_rakefile 'lib/tasks/namespace_name.rake'
method_name(arg1, arg2)
您不需要指定命名空间,但我只是尝试了这个并且它有效,这有点奇怪。
答案 1 :(得分:3)
你混淆了两种不同的“命名空间” - Ruby模块可以执行“命名空间”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]