2013-02-23 28 views
9

tôi đang cố gắng để tạo ra tất cả các bảng của tôi từ schema.rbLàm thế nào để tạo cơ sở dữ liệu từ schema.rb mà không cần khởi tạo Rails?

tôi đã sử dụng lệnh: "rake db: schema: tải"

Tuy nhiên, điều này không thành công vì một trong initializers của tôi, nó là tham khảo một mô hình/bảng hiển nhiên không tồn tại (vì cơ sở dữ liệu trống)

Tôi có thể nhận xét các dòng này, sau đó chạy lược đồ: tải lại, nhưng có cách nào khác không?

Trả lời

5

Bạn có thể thêm dấu kiểm cho bảng tồn tại trong trình khởi tạo của bạn.

if TheModel.table_exists? 
    // do something with the model 
end 
+0

Tôi đã kết thúc bằng cách sử dụng phương pháp này trong initializer đá quý ActiveAdmin, kể từ đó đá quý tải hoàn toàn không đúng cách. Nhưng dù sao đi nữa, +1. – MrDerp

28

Có lẽ cách nhanh nhất là chỉ cần di chuyển trình khởi tạo vi phạm vào một thư mục tạm thời nằm ngoài ứng dụng và sau đó chạy tải lược đồ của bạn. Nhưng nếu điều đó không làm việc, hoặc không phải là một lựa chọn cho một số lý do nào, bạn luôn có thể làm việc xung quanh đó bằng cách tạo một ứng dụng xương ray trần để làm tải schema:

  1. Tạo một ứng dụng đường ray mới: rails new (app)-fixer
  2. Sao chép gemfile của bạn (trừ khi có ngoại lệ cụ thể) cho ứng dụng sửa lỗi.
  3. Sao chép cấu hình database.yml của bạn vào ứng dụng trình sửa lỗi.
  4. Sao chép tệp schema.rb của bạn vào ứng dụng fixer.
  5. Thực hiện tất cả lệnh "cài đặt nhóm" thích hợp khi cần thiết cho ứng dụng của bạn.
  6. Sau đó chạy "rake db:drop db:create db:schema:load"

Điều đó sẽ xây dựng một cơ sở dữ liệu mới từ đầu, dựa trên sơ đồ hiện tại của bạn.

+0

Phải là câu trả lời được chấp nhận. Làm việc như một say mê – Aakanksha

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