2010-02-05 36 views
16

Nhóm của chúng tôi đang phát triển ứng dụng Rails trên MySQL và sử dụng config.active_record.schema_format = :sql trên The Rails Guides.Giá trị AUTO_INCREMENT không đồng bộ trong tệp development_structure.sql từ Rails/MySQL tạo ra nhiễu khác

Đương nhiên, các giá trị AUTO_INCREMENT của chúng tôi trong development_structure.sql không đồng bộ khi chúng tôi phát triển song song. Chúng tôi biết rằng có các giá trị khác nhau trong cơ sở dữ liệu của chúng tôi cho AUTO_INCREMENT không phải là một vấn đề kỹ thuật. Tuy nhiên, nó tạo ra rất nhiều tiếng ồn diff khi chúng tôi diff trước khi đăng ký. Trong nhiều hơn một lần chúng tôi đã phá vỡ xây dựng của chúng tôi bởi vì một trong số chúng tôi đã bỏ lỡ một sự thay đổi quan trọng trong development_structure.sql đã được ngụy trang bởi tất cả các tiếng ồn.

Bất kỳ đề xuất nào về cách loại bỏ tiếng ồn diff này để mắt của chúng ta có thể tập trung vào những thay đổi quan trọng?

Cảm ơn.

+0

Đây có phải là câu hỏi ngớ ngẩn không? –

+0

Điểm khác biệt thực tế trông như thế nào? Công cụ tìm khác biệt của bạn có thể cần nâng cấp. –

+0

Sự khác biệt là tốt. Nó cho thấy rằng mỗi cơ sở dữ liệu MySQL phát triển của mỗi nhà phát triển có một giá trị AUTO_INCREMENT khác nhau cho mỗi bảng, tự nhiên xảy ra khi các nhà phát triển tạo bản ghi trên các máy của riêng họ. –

Trả lời

7

Một biến thể của câu trả lời được chấp nhận là bao gồm trong một file .rake trong lib/nhiệm vụ:

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 

này có lợi thế là làm cho sự thay đổi trong hành vi cố ý xuất hiện nhiều hơn (theo đề nghị của: http://edgar.tumblr.com/post/52300664342/how-to-extend-an-existing-rake-task), đặc biệt nếu được đưa vào tệp có tên mô tả (ví dụ: 'skip_auto_increment.rake').

5

Tại Razoo, chúng tôi đã kết thúc trọng db: di chuyển

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

và sau đó db: cấu trúc: đổ

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 
12

@Ian, cảm ơn bạn rất nhiều vì đã gợi ý. Nhưng trên Rails 3.2 giờ thì nó đơn giản hơn rất nhiều. Không cần phải gọi các nhiệm vụ vì nó dẫn đến lỗi mức quá sâu và không cần ghi đè lên mô tả tác vụ. Vì vậy, mã của tôi giống như vậy:

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 

Làm việc cả cho db:migratedb:structure:dump.

+0

Điều này không hoạt động theo Ruby 1.9.2 "phương thức chưa xác định' ghi 'cho Tệp: Lớp " – Jan

+0

Phương thức này có sẵn theo 1.9.3 – sekrett

+0

Bạn dán mã này vào dự án Rails ở đâu? – abeger

Các vấn đề liên quan