ruby-on-rails - Rails 项目中的 rake 范围?

标签 ruby-on-rails rake

在我正在从事的项目中,我有许多使用 rakes 运行的解析器。当使用另一个 rake 中已经存在的方法名称时,由于它们都使用相同的环境,我会遇到冲突。

有没有办法限制 rake 文件在其命名空间内的范围?我认为这就是命名空间的全部意义所在?

例子:

namespace :test do
  task :test_task => :environment do
      ...
  end

  def test_method(argument)
    ...
  end    
end

namespace :other_test do
  task :test_task => :environment do
    ...
  end

  def test_method(argument, argument2)
    ...
  end
end

在这种情况下,运行 rake test:test_task 时我会收到无效数量的参数错误。另一方面,如果我在任务本身中定义方法,我必须将方法按顺序保留在 rake 文件的顶部。这有点令人困惑和丑陋。

这只是一种必要的邪恶吗?

谢谢!

最佳答案

我认为 rake 任务的命名空间与文件系统中的目录具有相同的目的:它们是关于组织而不是封装。这就是数据库任务在 db: 中的原因, Rails 任务在 rails: , 等等。

Rake 命名空间不是类,因此您需要问问自己要添加什么类 test_method当您在 Rake 命名空间中定义它时。答案是对象。所以,当你完成第二个任务时,Object 已经有一个 test_method方法接受一个参数,Ruby 正确地提示。

最好的解决方案是让你的 Rake 任务非常薄(就像 Controller 一样),并将任何支持方法(例如 test_method )放在某个库文件中的某个合理的地方。一个 Rake 任务通常应该只做一些设置,然后调用一个库方法来完成真正的工作(即与 Controller 相同的总体布局)。

执行摘要:将所有真正的工作和繁重的工作放在您的库文件中,并使您的 Rake 任务为您的库打包。这应该可以通过适当的代码组织使您的问题消失。

关于ruby-on-rails - Rails 项目中的 rake 范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6172292/

相关文章:

ruby-on-rails - 在我的 Rails 应用程序中使用 twilio 发送短信的问题

mysql - ln :/usr/lib/libmysqlclient. 18.dylib:文件存在

ruby - rake 错误 : Stack level too deep

ruby-on-rails - "Command failed with status ()"预编译 Assets 时

ruby-on-rails - 命名空间外的 Rake 任务

ruby-on-rails - RSPEC Redirect_To 语法

ruby-on-rails - 您已经激活了 rake 0.8.7,但是您的 Gemfile 需要 rake 0.9.2。考虑使用 bundle exec。

ruby-on-rails - Mini_magick (3.6.0) bundle 更新时出错 - Ruby On Rails

ruby-on-rails - 拥有多与属于一关系

ruby-on-rails - Rake - 添加到默认任务