2012-08-25 37 views
8

Tôi muốn chạy một số (> 2) ứng dụng Rack nhỏ dựa trên máy chủ VPS của tôi, mà đã có một ứng dụng Rails lớn đang chạy.Làm thế nào để chạy nhiều ứng dụng Ruby (Rack) nhỏ trên một máy chủ?

Ứng dụng Rails sử dụng cặp truyền thống "Unicorn + nginx" và nó yêu cầu hầu hết các tài nguyên RAM tôi có trên máy VPS của mình.

Tôi đã thử thêm cấu hình Unicorn tương tự cho mỗi ứng dụng và điều đó dẫn tôi đến sự thiếu tài nguyên RAM.

Vì vậy, câu hỏi của tôi là: có thể thiết lập một máy chủ tiết kiệm bộ nhớ nhỏ gọn sẽ cho phép chạy tất cả các ứng dụng Sinatra cùng một lúc không?

CẬP NHẬT: trong trường hợp có quan trọng không, tôi không quan tâm nhiều đến hiệu suất. Các ứng dụng đó không có ý định thực hiện bất kỳ công việc nghiêm túc nào.

UPDATE2: phương pháp dựa trên socket được chia sẻ với Nginx được ưu tiên hơn cổng có cổng.

Cảm ơn!

+0

Tại sao không chạy các ứng dụng trên cùng một kỳ lân như ứng dụng chính? Chỉ cần hack các tuyến đường vào tập tin rackup. – Catnapper

+0

Vâng, tôi cũng nghĩ về điều này. Cũng như về việc thiết lập một chuỗi middlewares. Vấn đề - điều này sẽ dẫn đến sự mâu thuẫn hợp lý - tất cả các ứng dụng của tôi không liên quan đến nhau theo bất kỳ cách nào. –

+0

Điều thú vị ở đây là tìm cách tiếp cận để có 'nhiều ứng dụng Rack nhỏ trên một máy chủ'. Tôi muốn biết, nếu nó có thể nói chung. –

Trả lời

5

Tôi đã tự khám phá câu hỏi này và tôi nghĩ mình đã tìm được giải pháp cho phép tôi có một máy chủ web chạy tất cả các ứng dụng nhỏ cùng một lúc.

Nó dựa trên RackStack không-chưa-một-đá quý được tạo ra bởi Remi Taylor (@remi trên Github) https://github.com/remi/rack-stack.

RackStack được lấy cảm hứng từ Rack :: Builder, có vẻ tốt cho việc hoàn thành một nhiệm vụ như thế này - RackStack chỉ đi theo cùng hướng, trừu tượng hóa chức năng "ngăn xếp" theo cách tôi thấy rất đẹp và tiện dụng.

Đây là một minh chứng về RackStack bao gồm hai ứng dụng mẫu (Sinatra và Rack): https://github.com/stanislaw/skeletons/tree/master/rack_stack. Để bắt chước hành vi ứng dụng ngăn xếp trên máy chủ thực, tôi đã sửa đổi tệp/etc/hosts của mình để có máy chủ lưu trữ localhost2 trỏ đến 127.0.0.1.

Tôi khởi động máy chủ Thin và sau đó chạy yêu cầu trên máy chủ cục bộ hoặc localhost2: các yêu cầu tới 'localhost' được phục vụ bởi FirstApp, tới 'localhost2' bởi SecondApp. Tôi không thể thấy trước bất kỳ vấn đề nào có thể xuất hiện, khi tôi thử nghiệm ứng dụng trên máy chủ thực, nhưng bây giờ phương pháp này dường như chính xác những gì tôi đang tìm kiếm: Tôi tưởng tượng, trên máy chủ thực Nginx sẽ chuyển yêu cầu tới tất cả các máy chủ được liên kết với các ứng dụng giá của tôi đến một ổ cắm được máy chủ Thin lắng nghe. Vì vậy, RackStack sẽ chỉ đáp ứng những yêu cầu được gửi đến các ứng dụng tôi có trong ngăn xếp của tôi.

Bất kỳ đề xuất, cải tiến nào của chương trình này hoặc các lựa chọn thay thế vẫn được đánh giá cao!

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