Внесинхронизация значений AUTO_INCREMENT в development_structure.sql из Rails/MySQL создает diff noise
Наша команда разрабатывает приложение Rails в MySQL и использует config.active_record.schema_format = :sql
за The Rails Guides.
Естественно, наши значения AUTO_INCREMENT
в development_structure.sql
получаются несинхронными по мере развития параллельно. Мы знаем, что наличие разных значений в наших базах данных для AUTO_INCREMENT
не является технической проблемой. Тем не менее, он создает много шума diff
, когда мы diff
перед проверкой. Не раз мы нарушили нашу сборку, потому что один из нас пропустил важное изменение в development_structure.sql
, которое было замаскировано всем шумом.
Любые предложения по устранению этого шума diff
, чтобы наши глаза могли сосредоточиться на важных изменениях?
Спасибо.
Ответы
Ответ 1
Вариантом принятого ответа является включение следующего в файл .rake в lib/tasks:
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
@Я хочу поблагодарить вас за подсказку. Но теперь 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
.
Ответ 3
В 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