2012-05-07 37 views
20

Tôi hiện đang xây dựng 2 API sử dụng Ruby on Rails. Một nếu để đọc (tìm kiếm các đối tượng, truy vấn) và một trong những khác là để thực sự viết cho nó, liên quan đến một loại quá trình phức tạp với hàng đợi và API khác. Cả hai ứng dụng đều yêu cầu cùng một mô hình và logic giống nhau bên trong chúng.Chia sẻ mô hình giữa 2 Rails API's (Ứng dụng riêng biệt)

Câu hỏi của tôi là cách hay nhất hay nhất để chia sẻ thông số kỹ thuật mô hình (mối quan hệ, phạm vi, phương pháp) giữa 2 ứng dụng đường ray là gì?

Cảm ơn bạn!

+0

Bạn có thể thay đổi mã trong cả hai API? hoặc có hạn chế nào không? –

+0

@NigelThorne Tôi chắc chắn có thể, cả hai đều được xây dựng bởi tôi. – Gotjosh

Trả lời

4

Cách tôi thực hiện nó là 'Động cơ có thể lắp'. Hãy xem Railscast by Ryan Bates tuyệt vời dành cho người mới bắt đầu và engine-section at api.rubyonrails.org để biết thêm chi tiết.

Với Trân, Mandi

+0

Railscast được cho là dành cho các ứng dụng mới nhưng API đầu tiên nó đã được tạo, bên cạnh các công cụ bạn sẽ chia sẻ bộ điều khiển và chế độ xem nếu tôi đúng mà không phải là trường hợp của tôi ... – Gotjosh

+2

@Gotjosh Bạn có thể trích xuất các mô hình hiện có của mình vào động cơ (được đóng gói tốt nhất thành đá quý). Sau đó, bao gồm đá quý này vào ứng dụng cũ của bạn và voilà, các mô hình của bạn có sẵn. Bạn có thể đưa đá quý vào bất kỳ ứng dụng nào khác mà bạn thích. Và không, động cơ không tự động cung cấp bộ điều khiển.Một công cụ có thể cung cấp bất kỳ hoặc tất cả các phần của ứng dụng Rails, mô hình, chế độ xem, bộ điều khiển, tệp nội dung (JS, CSS), v.v. Một cuốn sách hay về điều này là "Ứng dụng tạo đường ray" của José Valim. –

1

Nếu bạn chỉ muốn chia sẻ các mô hình, bạn có thể thêm thư mục mô hình dự án khác vào đường dẫn tự động tải của bạn s:

rails new test1 
rails new test2 
cd test1 
rails g model User 
cd ../test2/ 
# ACTION REQUIRED: edit config/application.rb adding this line 
# inside the class Application < Rails::Application block: 
# 
# config.autoload_paths += %W(#{config.root}/../test1/app/models) 
# 
mkdir db/migrate 
cp ../test1/db/migrate/*_create_users.rb db/ 
mv db/*_create_users.rb db/migrate/ 
rake db:migrate 
rails r 'puts User.inspect' 
#=> User(id: integer, created_at: datetime, updated_at: datetime) 

Bạn cũng có thể đặt toàn bộ điều để có hai app/models thư mục như tư nhân, sử dụng một thư mục chia sẻ thứ ba, thêm này cho các dự án:

# config.autoload_paths += %W(/path/to/a/shared/folder) 

Thư mục này thậm chí có thể không phải là cùng một thư mục cho mỗi dự án, vì vậy nó có thể là một đường dẫn đến một mô-đun con git, ví dụ (nếu bạn sử dụng GIT, tôi khuyên bạn nên giải pháp này).

Một lựa chọn khác có thể được chỉ app/models vào một thư mục chia sẻ với một liên kết mềm

1

lừa tôi để làm điều này là không thực sự sử dụng Rails thủ đoạn. Tôi sử dụng thủ thuật "git" và lấy mã từ repo thứ 3, được chia sẻ. Tôi đặt nó vào cả hai ứng dụng như một công cụ, và như một tham chiếu git bên ngoài.

Đó là một công việc nhỏ hơn một chút, nhưng một khi bạn đã thực hiện nó một lần trong một ứng dụng, thật dễ dàng để sử dụng nó làm mẫu cho một ứng dụng tiếp theo.

+0

Điều đó không có nghĩa là bạn phải đẩy những thay đổi trong một ứng dụng để Git trước khi bạn có thể nhìn thấy chúng trong các ứng dụng khác? Làm thế nào bạn sẽ phát triển và thử nghiệm một cái gì đó mới? Bạn có ý nghĩa gì bởi 'động cơ'? – Chloe

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