来自Rails/MySQL的development_structure.sql中的不同步AUTO_INCREMENT值会产生差异噪声

Ian*_*sky 17 ruby-on-rails mysqldump

我们的团队正在开发一个关于MySQL的Rails应用程序并使用config.active_record.schema_format = :sql每个Rails指南.

当然,随着我们并行发展,我们的AUTO_INCREMENT价值观development_structure.sql会失去同步.我们知道在我们的数据库中使用不同的值AUTO_INCREMENT不是技术问题.但是,diff在我们diff办理登机手续之前,它会产生很多噪音.在不止一次的情况下,我们打破了我们的构建,因为我们中的一个人错过了一个development_structure.sql由所有噪音掩盖的重要变化.

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

谢谢.

sek*_*ett 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
Run Code Online (Sandbox Code Playgroud)

适用于db:migratedb:structure:dump.

  • 回答我自己的问题:lib/tasks/db.rake. (2认同)

Jan*_*ich 8

接受的答案的一个变体是在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
Run Code Online (Sandbox Code Playgroud)

这样做的好处是可以使行为的变化更有意义(如:http: //edgar.tumblr.com/post/52300664342/how-to-extend-an-existing-rake-task),特别是.如果放入描述性命名的文件(例如'skip_auto_increment.rake').


Ian*_*sky 5

Razoo,我们最终覆盖了db:migrate

task :migrate do
  Rake::Task['db:migrate'].invoke
  Rake::Task['db:structure:dump'].invoke
end
Run Code Online (Sandbox Code Playgroud)

然后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
Run Code Online (Sandbox Code Playgroud)