2015-10-13 15 views
7

Ι đã bắt đầu dự án Rails Spree cùng với một người bạn và chúng tôi sử dụng GitHub để kiểm soát phiên bản.Dự án Rails Spree - Cơ sở dữ liệu không thể tiếp cận từ người đóng góp khác trên Git

Tôi đã tạo dự án mẫu trong máy của mình và đã cài đặt chức năng Spree trên đó. Điều này tạo ra một cơ sở dữ liệu với các sản phẩm mẫu, như vậy:

enter image description here

Khi bạn tôi bắt chước các dự án trong máy và nhập khẩu nó mình, chạy rails server không thành công với MigrationException và hỏi anh ta để chạy rake db:migrate.

Chạy rake db:migrate không thành công sau một vài lần di chuyển, trên cột db không tồn tại.

rake aborted! 
StandardError: An error has occurred, this and all later migrations canceled: 

SQLite3::SQLException: no such column: spree_calculators.deleted_at: SELECT "spree_calculators".* FROM "spree_calculators" WHERE "spree_calculators"."deleted_at" IS NULL ORDER BY "spree_calculators"."id" ASC LIMIT 1000C:in `find_each' 
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:15:in `migrate_preferences' 
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:4:in `up' 
C:in `migrate' 
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: spree_calculators.deleted_at: SELECT "spree_calculators".* FROM "spree_calculators" WHERE "spree_calculators"."deleted_at" IS NULL ORDER BY "spree_calculators"."id" ASC LIMIT 1000 
C:in `find_each' 
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:15:in `migrate_preferences' 
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:4:in `up' 
C:in `migrate' 
SQLite3::SQLException: no such column: spree_calculators.deleted_at 
C:in `find_each' 
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:15:in `migrate_preferences' 
C:/Users/User/xylino/xylino_serena/db/migrate/20151011115236_migrate_old_preferences.spree.rb:4:in `up' 
C:in `migrate' 
Tasks: TOP => db:migrate 
(See full trace by running task with --trace) 

Sau đó, chạy rails server một lần nữa là thành công, nhưng không có sản phẩm hoặc các vật dụng khác có thể được nhìn thấy trong trang mẫu của mình, như vậy:

enter image description here

Cần phải có một cái gì đó sai trái với cơ sở dữ liệu. Các bộ phận hoặc tất cả không thể truy cập được, có thể do các vấn đề bảo mật vì chúng tôi đang chia sẻ db, nhưng tôi không thể tìm thấy giải pháp. Hoặc có thể đó chỉ là vấn đề di chuyển bị hỏng

Bất kỳ ý tưởng nào?

+0

bạn không có nghĩa vụ phải có một db chia sẻ trong phát triển, hạt giống là cách để đi – apneadiving

Trả lời

6

Việc di chuyển đường đôi khi có thể bị lỗi thời với môi trường sống của bạn. Điều này có thể xảy ra nếu bạn có một nhóm cơ sở dữ liệu riêng biệt cập nhật môi trường sản xuất của bạn và quên thực hiện di chuyển cho nó. Nó cũng có thể xảy ra nếu bạn cập nhật di chuyển của bạn, quên chạy lại chúng, hoặc bằng cách nào đó nhận được trong một trạng thái không nhất quán.

cách tốt nhất cách làm này là dành cho nhà phát triển mới trong dự án chạy rake db:schema:load. Điều này sẽ tải cấu trúc cơ sở dữ liệu từ tệp db/schema.rb của bạn, tệp này sẽ có mọi thứ được cập nhật nhất có thể. Sau đó, bạn có thể chạy rake db:migrate chỉ để xác minh mọi thứ được di chuyển.

Tuy nhiên, sau đó, bạn sẽ có cấu trúc của cơ sở dữ liệu, nhưng không phải là nội dung của cơ sở dữ liệu. Giả sử bạn có bảng người dùng với [email protected] là người dùng. Đồng nghiệp của bạn sẽ có bảng người dùng với số người dùng no trong đó.

Để khắc phục điều đó, bạn có thể chỉnh sửa tệp db/seeds.rb. Trong đó, bạn có thể làm những thứ như:

User.create(name: 'Dimitris Sfounis', email: '[email protected]', password: 'password123') 
User.create(name: 'Some Colleague', email: '[email protected]', password: 'password123') 
Product.create(name: 'Ruby on Rails Tote', price: 15.99) 
Product.create(name: 'Ruby on Rails Bag', price: 22.99) 

Ý tưởng ở đây là bạn tạo bản demo dữ liệu, đủ để đứng dậy và chạy và kiểm tra nội dung trong một thương hiệu mớitrống cơ sở dữ liệu. Với điều đó tại chỗ, rake db:seed sẽ cung cấp đủ dữ liệu để chạy ứng dụng.

Nếu điều đó không đủ tốt và bạn muốn bản sao cơ sở dữ liệu chính xác cho tất cả nhà phát triển, bạn có thể tải lên cơ sở dữ liệu SQLite của mình và yêu cầu mỗi người tải xuống bản sao mới khi họ kéo cơ sở dữ liệu xuống.Tuy nhiên, điều này là khó khăn để quản lý, bởi vì mỗi lần ai đó cập nhật chi nhánh chính với một di chuyển mới, bạn sẽ cần phải cập nhật tệp SQLite. Đối với các cơ sở dữ liệu khác, bạn có thể đổ và khôi phục với pg_dump (Postgres) hoặc mysqldump (MySQL).

+0

Một câu hỏi để làm rõ, nếu cấu trúc DB là có, tại sao 'db: migrate' thất bại và báo cáo một cột bị thiếu? –

+0

Đoán của tôi là có sự cố với tệp cơ sở dữ liệu hoặc với lịch sử di chuyển. Đôi khi tôi sẽ viết một di chuyển, chạy nó, thay đổi suy nghĩ của tôi, thay đổi di chuyển, và chạy lại nó. Tuy nhiên, tôi có thể không nhận được di chuyển lên/xuống làm việc như đảo ngược hoàn hảo. Hoặc, một số di chuyển có thể thất bại nửa chừng và để lại DB trong trạng thái di chuyển một phần. Hoặc, một đồng nghiệp có thể đã di chuyển 20151027 thay đổi cột, nhưng 20151026 loại bỏ chúng và xảy ra để được triển khai trước tiên. Khi hai chi nhánh được sáp nhập công cụ có thể phá vỡ. –

1

Nếu bạn bắt đầu một dự án đường ray mới/Spree với sqlite3 trên máy tính của bạn (chúng ta hãy gọi nó là máy A) và bạn bè của bạn muốn sử dụng cùng mã trên máy B, bạn phải giữ lại một số điều trong tâm trí:

Các tệp .sqlite3 được lưu trữ dưới db/ được tự động thêm vào tệp .gitignore bởi trình tạo đường ray.

... 
# Ignore the default SQLite database. 
/db/*.sqlite3 
/db/*.sqlite3-journal 
... 

Vì vậy, bạn bè của bạn thậm chí không có được cơ sở dữ liệu, nếu bạn không thay đổi .gitignore (mà tôi không khuyên bạn nên, bởi vì khi triển khai bạn không không muốn có những thứ phát triển sản xuất của bạn server)

Các quy trình làm việc nên là:

  • Bạn phát triển một máy A
  • Bạn cam/đẩy thay đổi
  • bạn bè của bạn kéo các thay đổi
  • Gọi điện cho bạn bè rake db:migrate mỗi khi anh ta kéo repo.
  • (tùy chọn), bạn cư db/seeds.rb với dữ liệu mẫu và gọi rake db:seed
  • khi ông đẩy bạn có thể làm các bước 1-4 để có thiết lập cơ sở dữ liệu của bạn một cách chính xác

Hope this helps hiểu biết

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