2009-10-13 23 views
18

Có một development_structure.sql bên trong thư mục/db của ứng dụng đường ray của tôi (đường ray 2.3.4, ruby ​​1.8.7) và tôi không chắc chắn chính xác nó làm gì.db/development_structure.sql trong dự án đường ray là gì?

  1. Có cần thiết cho một số môi trường cụ thể không? (Tôi nghĩ rằng tôi đọc ở đâu đó mà nó được sử dụng để kiểm tra)
  2. Tôi có cần phải thêm nó vào kho git của tôi không?
+1

điều này giống với cấu trúc.sql trong đường ray 3? Nếu vậy, câu hỏi này phải được chỉnh sửa –

+0

@boulder_ruby yes –

Trả lời

20

Bạn không nên thêm nó vào kho lưu trữ git của mình.

Đây là tệp được tạo tự động bằng đường ray khi bạn chạy di chuyển với cơ sở dữ liệu của bạn.yml được định cấu hình để kết nối với cơ sở dữ liệu mysql. Bạn có thể xem nó như là một thay thế cho schema.rb

Tôi tin rằng bạn có thể buộc ray để tạo ra nó bằng cách thêm trong environment.rb của bạn:

config.active_record.schema_format = :sql 

Khi hiện tập tin này được sử dụng ví dụ bằng cách:

rake db:test:clone_structure 

Sửa

phần có liên quan trong Ruby On Rails Guides. http://guides.rubyonrails.org/migrations.html#schema-dumping-and-you

Chúng tôi khuyên bạn nên kiểm tra xem điều khiển nguồn trên wiki.

Cá nhân tôi muốn giữ nó ra khỏi nó. Tôi thích để có thể chạy tất cả các di cư rất nhanh chóng. Đó là cho tôi một dấu hiệu tốt. Nếu di chuyển trở nên chậm tôi cảm thấy như tôi không hoàn toàn kiểm soát được môi trường của mình nữa. Sự chậm chạp trong di cư thường có nghĩa là tôi có rất nhiều dữ liệu trong cơ sở dữ liệu phát triển của mình mà tôi cảm thấy sai.

Tuy nhiên, dường như đây là vấn đề về sở thích cá nhân hiện nay. Thực hiện theo bản năng của bạn trên bản đồ này.

+17

... ngoại trừ việc bạn * nên * thêm nó vào kho lưu trữ của bạn, giống như bạn nên thêm schema.rb vào kho lưu trữ của mình. Điểm có tệp trong kho lưu trữ là bạn không phải chạy tất cả các di chuyển khi thiết lập một DB mới. –

+1

@ MarnenLaibow-Koser Tôi đã có nó trong repo của tôi và nó luôn luôn thay đổi giá trị auto_increment của id, đó là khá khó chịu – ecoologic

+1

@ecoologic Yeah, có thể là một chút khó chịu. Đây là một trong những lý do bạn nên sử dụng schema.rb thay vì struct.sql nếu có thể. Nhưng nó hoàn toàn phải ở trong kho. –

1

Được tạo khi bạn chạy tác vụ cào để sao chép cơ sở dữ liệu phát triển của bạn vào cơ sở dữ liệu thử nghiệm. Cơ sở dữ liệu phát triển được xuất ra SQL mà sau đó được đọc vào DB thử nghiệm của bạn. Bạn có thể xóa nó một cách an toàn.

29

Bài đăng này đã được sử dụng làm tài liệu tham khảo của đồng nghiệp của tôi, nhưng hai câu trả lời không chính xác hoặc đủ thông tin.

development_structure.sql là một kết xuất lược đồ cấp thấp, cần thiết khi bạn bắt đầu sử dụng các tính năng cơ sở dữ liệu độc quyền - dù bạn muốn hay không, bạn sẽ sử dụng chúng tại một số điểm.

Về câu hỏi lưu trữ hay không, có một số tranh luận. Đây là một bài viết thông tin: http://www.saturnflyer.com/blog/jim/2010/09/14/always-check-in-schema-rb/. Và việc tôi thực hiện điều này sau đây.

Mục tiêu của tệp development_structure.sql là đồng bộ hóa, cho bất kỳ cam kết đã cho nào, cấu trúc cơ sở dữ liệu với mã, mà không có kiến ​​thức trước về cấu trúc lược đồ, nghĩa là không cần phải dựa vào trạng thái trước lược đồ để lấy lược đồ mới.

Tóm lại, bằng cách có cấu trúc lược đồ có sẵn, bất cứ khi nào bạn thay đổi nhánh/cam kết, bạn tải nó trực tiếp và quên nó. Điều này chủ yếu là hợp lệ cho các dự án năng động và "đông đúc", nơi các nhánh khác nhau có sự khác biệt trong cấu trúc lược đồ cơ bản.

Nếu không có cấu trúc lược đồ được lưu trữ, bạn sẽ luôn phải sử dụng lược đồ tham chiếu hiện có trong cơ sở dữ liệu của bạn và di chuyển nó trở lại hoặc chuyển tiếp mỗi khi bạn thay đổi nhánh/cam kết; một số trường hợp trong thế giới thực có thể làm cho quá trình này không hiệu quả (ví dụ: khi một chi nhánh khác không có một số di chuyển bạn hiện có hoặc một số di chuyển không thể khôi phục được).

Một vấn đề khác là các bản dựng tự động, bị các vấn đề tương tự và thậm chí tệ hơn, chúng không thể áp dụng các thay đổi thủ công.

Nhược điểm duy nhất là nó đòi hỏi một thói quen nhất định, đó là, để lưu trữ nó mỗi khi bạn chạy một di chuyển. Dễ nói, nhưng cũng dễ quên.

Tôi không nói rằng bạn không thể sống mà không có development_structure.sql - tất nhiên bạn có thể. Nhưng nếu bạn có nó, khi thay đổi chi nhánh/cam kết bạn chỉ cần tải và quên; nếu không, bạn [có thể] phải trải qua một loạt các bước thủ công.

0

Trong ray 3, bạn thậm chí không phải viết dòng này,

config.active_record.schema_format =: sql

Bạn có thể tạo tập tin structure.sql này bằng cách đơn giản chạy lệnh cào trên đã đề cập ở trên

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