Rake依赖不执行但调用工作

时间:2013-04-08 20:31:01

标签: ruby rake rake-task

我一直在尝试运行rake db:test:clone_structure,但它一直无法重建数据库。我终于看了看任务本身:

task :clone_structure => [ "db:structure:dump", "db:test:load_structure" ]

当我运行跟踪时,我注意到db:test:load_structure没有被执行:

$ rake db:test:clone_structure --trace
** Invoke db:test:clone_structure (first_time)
** Invoke db:structure:dump (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:structure:dump
** Invoke db:test:purge (first_time)
** Invoke environment 
** Execute db:test:purge
** Execute db:test:clone_structure

现在,当我将clone_structure任务更改为调用 load_structure时......

task :clone_structure => [ "db:structure:dump", "db:test:load_structure" ] do   
  db_namespace["test:load_structure"].invoke
end

......一切都突然起作用了!

$ rake db:test:prepare --trace

** Invoke db:test:clone_structure (first_time)
** Invoke db:structure:dump (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:structure:dump
** Invoke db:test:purge (first_time)
** Invoke environment 
** Execute db:test:purge
** Execute db:test:clone_structure
** Invoke db:test:load_structure (first_time)
** Invoke db:test:purge 
** Execute db:test:load_structure
** Invoke db:structure:load (first_time)
** Invoke environment 
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:structure:load

可能导致此行为的原因是什么?我正在使用Rails 3.2.14和Rake 10.1.0。

更新:我将Rails从3.2.11升级到3.2.13,这仍然是一个问题。

更新第二次:我将Rails升级到3.2.14并将Rake升级到10.1.0并且仍然存在问题

2 个答案:

答案 0 :(得分:1)

我会说你几乎就在那里。据我所知,rake约定就是......

task :clone_structure => [ "db:structure:dump", "db:test:load_structure" ] do   
  Rake::Task["clone_structure"].invoke
end

否则,我更喜欢......

task :clone_structure do   
  Rake::Task["db:structure:dump"].invoke
  Rake::Task["db:test:load_structure"].invoke
end

答案 1 :(得分:0)

在我知道正在调用的任务之一中粘贴堆栈跟踪后,我发现了问题。它与ActiveRecord或Rake无关,而且与activerecord-oracle_enhanced-adapter gem有关,我也在使用它。

基本上,gem会覆盖db:test:clone_structure任务,如下所示:

redefine_task :clone_structure => [ "db:structure:dump", "db:test:purge" ]

请注意,它错过了对db:test:load_structure的任何引用。

我已向项目提交了issuepull request,因此希望在不久的将来解决此问题。