17

我们的团队正在 MySQL 上开发 Rails 应用程序,并config.active_record.schema_format = :sql按照The Rails Guides使用。

自然,我们的AUTO_INCREMENT价值观在development_structure.sql我们并行发展时会变得不同步。我们知道,在我们的数据库中具有不同的值AUTO_INCREMENT不是技术问题。但是,当我们在办理登机手续之前,它会产生很多diff噪音。diff不止一次我们破坏了我们的构建,因为我们中的一个人错过了一个development_structure.sql被所有噪音掩盖的重要变化。

关于如何消除这种diff噪音以便我们的眼睛可以专注于重要变化的任何建议?

谢谢。

4

3 回答 3

12

@Ian,非常感谢您的提示。但是现在在 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 回答