Несинхронизированные значения AUTO_INCREMENT в development_structure.sql из Rails / MySQL создают различные помехи - PullRequest
17 голосов
/ 06 февраля 2010

Наша команда разрабатывает приложение Rails для MySQL и использует config.active_record.schema_format = :sql за Руководства по Rails .

Естественно, наши AUTO_INCREMENT значения в development_structure.sql становятся несинхронными, когда мы развиваемся параллельно. Мы знаем, что наличие в наших базах данных различных значений для AUTO_INCREMENT не является технической проблемой. Тем не менее, он создает много шума diff, когда мы diff перед регистрацией. Мы неоднократно ломали нашу сборку, потому что один из нас пропустил важное изменение в development_structure.sql, которое было замаскировано всем шумом.

Любые предложения о том, как устранить этот diff шум, чтобы наши глаза могли сосредоточиться на важных изменениях?

Спасибо.

Ответы [ 3 ]

12 голосов
/ 14 августа 2012

@ Йен, большое спасибо за подсказку. Но на 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.

8 голосов
/ 20 декабря 2013

Вариант принятого ответа заключается в том, чтобы включить в файл .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').

5 голосов
/ 15 сентября 2010

На Razoo мы закончили переопределением db: migrate

task :migrate do
  Rake::Task['db:migrate'].invoke
  Rake::Task['db:structure:dump'].invoke
end

и затем db: структура: дамп

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
...