2012-04-29 33 views
8

Tôi có ứng dụng Sinatra phản hồi các cuộc gọi api và ứng dụng Rails xử lý các báo cáo và tất cả nội dung đẹp như biểu đồ và trang web. Cả hai cần phải có quyền truy cập vào một nhóm mô hình phổ biến (ví dụ: Tài khoản, Trang web, v.v.)Chia sẻ mã mẫu giữa Sinatra và Rails

Vấn đề của tôi là: làm cách nào để chia sẻ mã hiệu quả giữa hai ứng dụng? Ví dụ: nếu tôi đang chỉnh sửa mô hình Tài khoản trong Sinatra, tôi không muốn phải sao chép cùng các thay đổi trong ứng dụng Rails. Tôi không muốn sử dụng giá đỡ Rails Rack vì hai ứng dụng sẽ nằm trên các cụm riêng biệt.

Tôi đã nhìn thấy gợi ý về StackOverflow về:

  • Git Modules
  • symlink (sẽ không làm việc với Windows mà đồng nghiệp của tôi sử dụng)
  • Rails plugins (tôi nghi ngờ điều này sẽ làm việc với Sinatra)
  • của Ruby Gems (tôi nghĩ rằng đây là quá overkill cho chỉ dữ liệu mô hình, nhưng đó chỉ là tôi)

hai ứng dụng một trong các kho khác nhau. Về cơ bản, tôi lần đầu tiên phát triển API, sau đó đưa vào logic Tài khoản cụ thể sau này trong ứng dụng Rails (chủ yếu là do Rails có nhiều thư viện hơn để giúp phát triển những thứ này dễ dàng hơn).

Bạn giải quyết vấn đề này như thế nào?

+0

Các ứng dụng trong cùng một kho lưu trữ hay các ứng dụng khác? –

+0

Họ đang ở trong kho khác nhau :) Bạn có đề nghị họ được trên cùng một kho lưu trữ sau đó? – parasquid

+1

Không, chỉ là tự hỏi khi các tùy chọn thay đổi một chút tùy thuộc. Cá nhân tôi nghĩ rằng một trong hai mô-đun git hoặc đá quý riêng là những lựa chọn tốt nhất. –

Trả lời

4

Tôi muốn mua đá quý, hay đúng hơn là đá quý, bạn không cần xuất bản nó, và sau đó sử dụng Bundler git dependencies. Chúng tôi làm điều này rất nhiều tại Travis CI và nó hoạt động rất tốt, đặc biệt là với các phụ thuộc git "cục bộ" mới trong Bundler 1.2: http://gembundler.com/man/bundle-config.1.html#LOCAL-GIT-REPOS

+0

Chỉ cần làm rõ, điều đó có nghĩa là tôi sẽ phải trích xuất các điểm chung giữa hai ứng dụng vào đá quý, đúng không? Nếu đó là trường hợp, bạn sẽ xảy ra để biết về một kho lưu trữ tôi có thể kiểm tra và học hỏi từ đó sử dụng kỹ thuật này? :) – parasquid

+0

Vâng, đó là ý của tôi. Một giải pháp thay thế sẽ là ứng dụng Sinatra hoặc ứng dụng Rails trong cùng một dự án hoặc ứng dụng Sinatra tải ứng dụng Rails. Hãy xem https://github.com/travis-ci/travis-core để biết ví dụ. –

+0

Tôi thấy, cảm ơn rất nhiều! :) – parasquid

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