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 にアップグレードしましたが、まだ問題があります。

2番目の更新: Railsを3.2.14に、Rakeを10.1.0にアップグレードしましたが、まだ問題があります

4

2 に答える 2

1

私はあなたがほとんどそこにいると言うでしょう。私が知る限り、これに対するレーキ規約は...

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

呼び出されていることがわかっているタスクの 1 つにスタック トレースを貼り付けたところ、問題が見つかりました。それは 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

プロジェクトにIssueプルリクエストを提出したので、近いうちに解決されることを願っています。

于 2013-09-16T16:11:05.540 に答える