Dưới đây là yêu cầu cơ bản của chúng tôi:Chạy một phiên bản tùy biến của một ứng dụng Rails
- Chúng tôi có một ứng dụng cơ sở Rails, hiện đang được tích cực duy trì.
- Chúng tôi muốn cung cấp phiên bản tùy chỉnh của ứng dụng này, cho rằng:
- máy chủ phải nằm trong tiền đề của khách hàng và chạy trên một miền khác.
- có công cụ ghi nhật ký cụ thể để theo dõi riêng của họ trong trung tâm dữ liệu.
Để làm điều đó, tôi có thể thấy một vài lựa chọn để đạt được mục tiêu đó:
- chi nhánh Git
Rails::Engine
Rails::Application
Câu trả lời rõ ràng nhất sẽ là Git branch, cho sự linh hoạt hoàn toàn. Tuy nhiên, tôi không chắc đó có phải là một ý kiến hay hay không, vì cơ sở mã phần lớn được chia sẻ và đường chính có nhiều hoạt động hơn - bắt kịp với việc rebase/merge có thể chỉ là rắc rối.
Chúng tôi muốn tách riêng bản gốc và các phiên bản tùy chỉnh càng nhiều càng tốt. Nói cách khác, chúng tôi muốn có càng ít xung đột càng tốt giữa bản gốc và tùy chỉnh.
Rails::Engine
hoặc Rails::Application
dường như là một ý tưởng gần gũi (Tôi không quen thuộc với Rails Engines), nhưng tôi không hiểu làm thế nào để có OurApp::Application
và OurCustomizedApp::Application
ở một nơi và chuyển đổi giữa chúng trên toàn cầu và năng động.
Có lẽ nó sẽ được tốt đẹp để có:
- tùy chỉnh initializers, bộ điều khiển và quan điểm trong một thư mục riêng biệt để ghi đè lên (hoặc miếng dán) bản gốc khả năng
- để xác định các ứng dụng (bản gốc hoặc tùy chỉnh) để khởi động bởi một biến môi trường như
RAILS_APP
- tập tin cấu hình riêng biệt, như vậy:
config/database.yml
làconfig/customer1/database.yml
- khả năng sử dụng cùng một
deploy.rb
cho capistrano (p robably vớiconfig/servers.yml
vàconfig/customer1/servers.yml
để xác định vai trò và IP?)
Có thực tiễn/quy ước nào cho các yêu cầu của chúng tôi không? Lời khuyên nào?
Ứng dụng của chúng tôi chạy trên Ruby 1.9.2 + Rails 3.0.3.
CẬP NHẬT
Chúng tôi bắt đầu nó như là một chi nhánh Git. Chúng tôi tạo ra một nhiệm vụ cào để tạo ra một tập tin tại config/branch
bao gồm văn bản như "chủ" hoặc "tùy chỉnh", và application.rb đọc nó khi bootstrap.Các xác nhận như database.yml
hoặc servers.yml
hiện đang hoạt động ở config/mainline/
hoặc config/customized/
và application.rb xử lý chúng tương ứng.
config.paths.config.database = "config/#{branch}/database.yml"
Không hoàn hảo, nhưng đủ tốt cho bây giờ. Tôi sẽ cập nhật khi chúng tôi tìm ra cách tốt hơn để thực hiện việc này.
Chúng tôi đã kết thúc với chi nhánh Git và nó đã hoạt động khá tốt cho đến nay. Cảm ơn! – kenn