【问题标题】:Rake task outside of namespace命名空间之外的 Rake 任务
【发布时间】:2015-01-06 18:39:16
【问题描述】:

我有一个像这样设置的 rake 文件:

require 'rake'

namespace :setup do
  puts "I'm in setup"
  task :create do
    puts "I'm in create"
  end
end

task :run do
  puts "I'm in run"
end

如果我运行rake setup:create,我会得到预期的结果:

I'm in setup
I'm in create

但是,如果我运行 rake run,我会得到:

I'm in setup
I'm in run

据我所知in the guides,这是出乎意料的,如下所述:

查找任务名称时,rake 会从当前任务名开始 命名空间并尝试在那里找到名称。如果找不到 当前命名空间中的名称,它将搜索父命名空间 直到找到匹配项(或者如果没有匹配项则发生错误)。

这不是假设 rake 从当前命名空间开始,然后继续寻找东西。在我的示例中,我没有提供当前的命名空间,但它会跳转到 setup,即使我给它的只是 run

我错过了什么?

【问题讨论】:

    标签: ruby-on-rails ruby rake rakefile


    【解决方案1】:

    puts "I'm in setup" 行不是任何任务的一部分——它将执行您指定的任何任务,即使是不存在的任务,因为正在解析文件(严格来说不是在 Ruby 解析文件时,而是因为它正在执行并设置 rake 任务):

    $ rake foo
    I'm in setup
    rake aborted!
    Don't know how to build task 'foo'
    
    (See full trace by running task with --trace)
    

    只有在读取文件后才会进行任务查找,这就是引用所指的内容。

    如果你想要一个命名空间的所有任务的一些通用代码,你需要为它创建一个任务并让命名空间中的所有其他任务都依赖它,例如:

    namespace :setup do
      task :create => :default do
        puts "I'm in create"
      end
    
      task :default do
        puts "I'm in setup"
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 2011-12-26
      相关资源
      最近更新 更多