Tôi xin lỗi nếu điều này nghe như một câu hỏi ngu ngốc, bởi vì nó có vẻ là một trong những thứ "không duh", nhưng ai đó có thể giải thích cho tôi tại sao Rails cần máy chủ riêng của mình (Mongrel, WEBrick, mod_rails, v.v ...) không thể đơn giản sử dụng mod_ruby?Tại sao Rails không thể làm việc với mod_ruby?
Trả lời
Tất cả các cá thể apache đang chạy mod_ruby dùng chung trình thông dịch Ruby. Điều này có nghĩa rằng nó không thể được sử dụng ở tất cả trên các máy chủ chia sẻ hoặc trong bất kỳ môi trường nào có nhiều ứng dụng Rails chạy trên mỗi máy. Trong có thể có thể chạy nhiều bản sao của cùng một ứng dụng trên một máy nhưng bạn cũng có thể dễ dàng gặp khó khăn khi theo dõi lỗi. Bởi vì đường ray đơn luồng, chỉ chạy một quá trình ruby trên mỗi máy là không thể tưởng tượng được.
Ngoài ra, nó không hoạt động tốt.
Đối với một nhiều hơn trong cuộc thảo luận sâu, hãy kiểm tra this Phusion employee's blog
"mod_ruby sử dụng một thông dịch viên cho mỗi quá trình Apache, có nghĩa là các ứng dụng đi bộ khắp nhau trong không gian tên. Ít nhất cho Rails, đó là không thể chấp nhận , do đó, nó là 1 ứng dụng cho mỗi thiết lập Apache nếu bạn muốn mod_ruby. " - David Heinemeier Hansson
Bây giờ nó được chế giễu một số người, nếu bạn vẫn muốn sử dụng nó, hãy kiểm tra mod_ruby FAQ
Dreamhost đã cố gắng bao gồm ruby vào môi trường lưu trữ của họ, điều này từ blog của họ trên những kết luận của họ từ nỗ lực này .
Nó đã được trả lời rằng kết quả mod_ruby trong một thông dịch viên Ruby được chia sẻ nhưng lý do này đặc biệt có vấn đề là nó có nghĩa là các lớp học lấy mẫu lẫn nhau. Ví dụ, xem xét ActiveRecord :: Base xác định kết nối tới một cơ sở dữ liệu nào đó. Trạng thái của lớp này khác nhau giữa các ứng dụng Rails khác nhau, vì vậy ngay sau khi có nhiều hơn một ứng dụng Rails được chạy trên cùng một trình thông dịch, bạn có một cuộc chiến lớp nghiêm trọng.
Một câu trả lời khác cho rằng Rails là một luồng đơn, nhưng điều này không nhất thiết phải đúng với Rails 2.2.2. Tôi muốn để lại điều này như là một bình luận về câu trả lời đó nhưng tôi đang ở trong một karma straitjacket :)