20

アクティブなデータベースをフィクスチャにダンプするためのプラグインとカスタム rake タスクを見てきましたが、一般的な手法が何であるかはわかりません。

基本的には、rake:db:fixtures:load の逆が必要です。これにより、デプロイ時に基本的なデータベース情報 (管理者ユーザー アカウントなど) を svn に入れることができます。サンプル データのような長い時間がかかるもののために、手動でフィクスチャを作成する必要はありません。

展開するときに、実行できるようにしたい

rake db:migrate
rake db:fixtures:load

そして、レースに出ましょう。

レールでこれを行うための最良の/推奨される方法は何ですか?

編集:

したがって、db:fixtures:load の反対のレーキ タスクを実行する標準的な方法はないようです。

すべてのプロジェクトでこれを行う標準的な方法が必要なため、移行を使用したくありません。移行に管理者アカウント以上のものを入れるという考えは好きではありません。第二に、フィクスチャを使用するという考えを再考しています。rake タスクを使用するため、yaml_db を使用することにしました。

rake db:data:dump
rake db:data:load

データは、テスト フィクスチャを中断することなく YAML ファイルにまとめられます (これについては、より慎重に検討したので、これは異なる可能性があります)。また、Heroku などの主要な配布ツールがそれを使用している場合、サポート/寿命の問題について心配する必要はありません。

これは、私が見つける「標準」に最も近いと思います。

すべてのすばらしい応答に感謝します。

4

6 に答える 6

14

これは、db/seeds.rb と関連する rake db:seed タスクを使用する必要があるように思えます。これらは、シード データをロードするために特別に設計されています。次に、 YamlDBを呼び出して データをロードし、db:data:dump_dir をレーキしてすべてのフィクスチャを一時ディレクトリにダンプし、必要に応じてシード データ ディレクトリにコピーします。

YAML 形式が異なるため、これはフィクスチャのダンプには機能しないことに注意してください。上記の ar_fixtures は Rails 3 では動作せず、サポートされていないようです。フィクスチャをダンプするには、lib/tasks/dump_fixtures.rake で次のようなことを試してください:

namespace :db do
  namespace :fixtures do    
    desc 'Create YAML test fixtures from data in an existing database.  
    Defaults to development database.  Specify RAILS_ENV=production on command line to override.'
    task :dump => :environment do
      sql  = "SELECT * FROM %s"
      skip_tables = ["schema_migrations"]
      ActiveRecord::Base.establish_connection(Rails.env)
      (ActiveRecord::Base.connection.tables - skip_tables).each do |table_name|
        i = "000"
        File.open("#{Rails.root}/test/fixtures/#{table_name}.yml.new", 'w') do |file|
          data = ActiveRecord::Base.connection.select_all(sql % table_name)
          file.write data.inject({}) { |hash, record|
            hash["#{table_name}_#{i.succ!}"] = record
            hash
          }.to_yaml
        end
      end
    end
  end
end

ここでこれを見つけて、Rails3 用に少し変更しました。

于 2012-08-30T01:37:38.637 に答える
2

それを行う標準的な方法はありません。フィクスチャをロードする標準的な方法のみ:

rake db:fixtures:load

しかし、インターネット上にはたくさんの例があります:

于 2009-08-25T16:39:26.420 に答える
1

db:fixtures:loadが期待するのとまったく同じ形式を使用しませんが、ar_fixturesを使用すると、YAMLファイルとしてのデータのダンプとロードが非常に簡単になります。

于 2009-08-25T04:48:42.473 に答える
1

が標準の管理者情報である場合は、それを移行に含める方がよいと思います。フィクスチャは、理想的にはテストにのみ使用する必要があります。

于 2009-08-25T16:33:20.520 に答える