Подтвердить что ты не робот

Внесинхронизация значений 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, чтобы наши глаза могли сосредоточиться на важных изменениях?

Спасибо.

4b9b3361

Ответ 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