0

Rails 3 アプリで postgresql を使用しています。私はテスト環境に sqlite3 を使用してきましたが、テスト目的で本番環境で使用しているのと同じデータベースに最終的に切り替えることにしました。問題は、環境ごとに 1 つのデータベースとさまざまなスキーマしか作成していないことです。これは、環境が企業によって制約されているため、私が変更できないものです。

したがって、テストスキーマがあります。db:schema:load を実行すると、正常に動作します。その上でrake specを実行すると(rspecを使用しています)、レールからの「db:test:purge」タスクで正確に壊れます。ここで、このタスクはデータベースを削除します。私の場合、データベースの所有者がスキーマの所有者と異なるだけでなく、データベースを再作成するのではなく、スキーマを再作成するタスクが必要です。

これどうやってするの?

4

2 に答える 2

0

Rails はデフォルトでデータベースを消去するため、実際にはこの問題に対する実際の解決策はありません。このデータベースが本番環境と共有されないことを期待しています (そして、それには意味があるかもしれません)。それにもかかわらず、興味深いリンクがいくつか見つかりました。その方法は、rake タスクにパッチを適用することです。パッチとリンクをたどる:

namespace :db do
  namespace :test do
    task :purge do
      ActiveRecord::Migration.verbose = false
      Rake::Task["db:schema:load"].invoke
    end
  end
end
于 2013-10-21T09:55:29.883 に答える
0

これはあなたの質問に対する直接的な回答ではありませんが、rspec代わりにコマンドを使用できますrake specrspecコマンドはデータベースをパージしません。

于 2013-11-12T03:27:23.297 に答える