abe*_*ger 7 ruby rake rake-task
我一直在尝试运行rake db:test:clone_structure,但它一直无法重建数据库.我终于看了看任务本身:
task :clone_structure => [ "db:structure:dump", "db:test:load_structure" ]
Run Code Online (Sandbox Code Playgroud)
当我运行跟踪时,我注意到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
Run Code Online (Sandbox Code Playgroud)
现在,当我将clone_structure任务更改为调用时 load_structure ......
task :clone_structure => [ "db:structure:dump", "db:test:load_structure" ] do
db_namespace["test:load_structure"].invoke
end
Run Code Online (Sandbox Code Playgroud)
......一切都突然起作用!
$ 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
Run Code Online (Sandbox Code Playgroud)
什么可能导致这种行为?我正在使用Rails 3.2.14和Rake 10.1.0.
更新:我将Rails从3.2.11升级到3.2.13,这仍然是一个问题.
更新第二次:我将Rails升级到3.2.14并将Rake升级到10.1.0,这仍然是一个问题
在我知道正在调用的任务之一中粘贴堆栈跟踪后,我发现了问题。它与 ActiveRecord 或 Rake 无关,与我也在使用的activerecord-oracle_enhanced-adapter gem 有关。
基本上,gem 会db:test:clone_structure像这样覆盖任务:
redefine_task :clone_structure => [ "db:structure:dump", "db:test:purge" ]
Run Code Online (Sandbox Code Playgroud)
请注意,它遗漏了对 的任何引用db:test:load_structure。
我已经向该项目提交了一个问题和拉取请求,因此有望在不久的将来得到解决。