2

发现这篇文章在 Rails 3.1 控制台中包含命名空间,但它似乎不起作用。

定义了以下库/任务,它可以从命令行运行: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。

4

2 回答 2

4

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

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

您不需要指定命名空间感觉有点奇怪,但我只是尝试过它并且它有效。

于 2012-05-09T15:21:28.197 回答
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]
于 2012-01-24T19:33:09.700 回答