7

我一直在尝试运行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,但这仍然是一个问题

4

2 回答 2

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
于 2013-06-05T19:06:38.603 回答
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.

我已经向该项目提交了一个问题拉取请求,所以它应该有望在不久的将来得到解决。

于 2013-09-16T16:11:05.540 回答