17

私たちのチームは、MySQLでRailsアプリを開発し、TheRailsGuidesに従って使用してconfig.active_record.schema_format = :sqlます。

当然、並行して開発するにつれて、私たちのAUTO_INCREMENT価値観は同期しなくなります。development_structure.sqlデータベースに異なる値を設定することAUTO_INCREMENTは、技術的な問題ではないことを私たちは知っています。ただし、チェックインする前に多くのdiffノイズが発生します。diff私たちの1人がdevelopment_structure.sqlすべてのノイズに偽装された重要な変更を見逃したため、何度もビルドが壊れました。

diff私たちの目が重要な変化に集中できるように、このノイズを除去する方法について何か提案はありますか?

ありがとう。

4

3 に答える 3

12

@イアン、ヒントありがとうございます。しかし、Rails 3.2では、はるかに簡単になりました。スタックレベルのエラーが深すぎるため、タスクを呼び出す必要はありません。また、タスクの説明を上書きする必要もありません。だから私のコードはそのようなものです:

namespace :db do
  namespace :structure do
    task :dump do
      path = Rails.root.join('db', 'structure.sql')
      File.write path, File.read(path).gsub(/ AUTO_INCREMENT=\d*/, '')
    end
  end
end

との両方で機能db:migratedb:structure:dumpます。

于 2012-08-14T11:53:29.627 に答える
10

受け入れられた答えの変形は、lib/tasksの.rakeファイルに以下を含めることです。

Rake::Task["db:structure:dump"].enhance do
  path = Rails.root.join('db', 'structure.sql')
  File.write path, File.read(path).gsub(/ AUTO_INCREMENT=\d*/, '')
end

これには、動作の変更をより意図的に見せることができるという利点があります( http://edgar.tumblr.com/post/52300664342/how-to-extend-an-existing-rake-taskで提案されています)。わかりやすい名前のファイル(例:'skip_auto_increment.rake')に入れる場合。

于 2013-12-20T02:19:19.043 に答える
5

Razooでは、db:migrateをオーバーライドすることになりました。

task :migrate do
  Rake::Task['db:migrate'].invoke
  Rake::Task['db:structure:dump'].invoke
end

次にdb:structure:dump

namespace :structure do
  desc "Dump the database structure to a SQL file"
    task :dump do
      Rake::Task['db:structure:dump'].invoke
      # open up the development_structure.sql file and gsub AUTO_INCREMENT=\d* with AUTO_INCREMENT
    end
  end
end
于 2010-09-15T16:30:28.790 に答える