我们的团队正在开发一个关于MySQL的Rails应用程序,每The Rails Guides使用config.active_record.schema_format = :sql
。
当然,AUTO_INCREMENT
中的development_structure.sql
值在我们并行开发时会失去同步。我们知道在AUTO_INCREMENT
的数据库中使用不同的值不是技术问题。但是,在我们diff
签到之前,它会产生大量diff
噪音。我们不止一次打破了我们的构建,因为我们中的一个人错过了development_structure.sql
中被所有噪音伪装的重要变化。
有关如何消除此diff
噪音的任何建议,以便我们的眼睛可以专注于重要的变化吗?
感谢。
答案 0 :(得分: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:migrate
和db:structure:dump
。
答案 1 :(得分: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
这样做的好处是可以使行为的变化更有意义(如http://edgar.tumblr.com/post/52300664342/how-to-extend-an-existing-rake-task所示),尤其是如果放入描述性命名的文件(例如'skip_auto_increment.rake')。
答案 2 :(得分: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