【问题标题】:How to access a namespace method in Ruby console?如何在 Ruby 控制台中访问命名空间方法?
【发布时间】:2012-02-17 23:42:34
【问题描述】:

找到这个帖子Include namespace in Rails 3.1 console,但它似乎不起作用。

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

如何在控制台中调用namespace_name 中的方法method_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 中工作。

【问题讨论】:

  • 不是 100% 确定您要做什么,但请考虑改用 rake-sh

标签: ruby-on-rails ruby ruby-on-rails-3 namespaces rails-console


【解决方案1】:

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

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

感觉有点奇怪,您不需要指定命名空间,但我刚刚尝试过,它奏效了。

【讨论】:

  • Rake.loadload有什么区别?
【解决方案2】:

您混淆了两种不同的“命名空间”——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]

【讨论】:

  • 要求 'rake' 返回nil。 Rake.load_rakefile 抛出 NoMethodError: undefined method 'load_rakefile' for Rake:Module
  • 另外,我想在命名空间中调用 method不是 rake 任务.
  • 另外,您发布的第一行运行 Rake 任务 - rake namespace_name:method_name 实际上是 rake namespace:task。在幕后,这可能会调用 namespace:method,但不能保证 - 你能发布 rake 任务文件的内容吗?
  • 要求返回nil 只是意味着库已经加载...如果找不到它,你会得到一个 LoadError 。但是然后NoMethodError load_rakefile...你能发布你正在使用的 Ruby 和 Rake 的版本吗?
  • 你是对的。 rake namespace_name:method_name 应该是 rake namespace_name:task_name。如何在不调用任务的情况下调用命名空间内的方法?
猜你喜欢
  • 2012-04-21
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 2013-05-17
相关资源
最近更新 更多