2008-09-16 33 views

Trả lời

18

Vấn đề cơ bản là điều này: trong một thời gian dài, MRI là triển khai thực hiện Ruby khả thi duy nhất. MRI có một số vấn đề khiến nó khó nhúng nó vào một ứng dụng khác (về cơ bản là những gì mod_ruby thực hiện: nó nhúng MRI vào Apache), đặc biệt là một luồng đa luồng (Apache). Nó không phải là đặc biệt an toàn thread và nó có khá nhiều trạng thái toàn cầu.

trạng thái toàn cầu này có nghĩa ví dụ rằng nếu một ứng dụng Rails sẽ thay đổi một số lớp, sau đó tất cả các ứng dụng khác Rails chạy trên máy chủ Apache cùng, sẽ cũng thấy lớp sửa đổi này.

Một vấn đề khác là mã nguồn MRI không dễ bị tấn công. MRI bây giờ đã hơn 15 tuổi và bắt đầu hiển thị.

Là kết quả của những vấn đề này, mod_ruby chưa bao giờ thực sự hoạt động bình thường và tại một số thời điểm các nhà bảo trì chỉ đơn giản là từ bỏ.

Trình thông dịch PHP dựa trên C, mặt khác, được thiết kế từ ngày đầu tiên để chạy dưới dạng mod_php bên trong Apache. Thật vậy, đối với một vài phiên bản đầu tiên, thậm chí không có một phiên bản dòng lệnh của trình thông dịch, mod_php là chỉ cách để chạy PHP.

Phusion Passenger (aka mod_rack aka mod_rails) giải quyết vấn đề này bằng cách cơ bản từ bỏ và bỏ qua vấn đề: họ chỉ cần chạy một bản sao riêng biệt của MRI trong một quy trình riêng biệt cho mọi ứng dụng. Nó hoạt động rất tốt, và không chỉ cho Ruby. Nó hỗ trợ WSGI (giao diện chuẩn cho các Khung Web Python), Rack (giao diện chuẩn cho các Khung Web của Ruby) và hỗ trợ trực tiếp cho Ruby on Rails.

Hy vọng của tôi là trên mod_rubinius, rất tiếc là không tồn tại. Rubinius được thiết kế ngay từ đầu để trở thành chủ đề an toàn, có thể nhúng, không có trạng thái toàn cầu, không sử dụng ngăn xếp C và cứ thế. Nó được thiết kế để có thể chạy nhiều máy ảo Rubinius bên trong một quá trình Rubinius. Điều này làm cho mod_rubinius vô cùng dễ dàng hơn trong việc thực hiện và duy trì hơn mod_ruby. Thật không may, tất nhiên, Rubinius chưa được phát hành, và công việc thực sự trên mod_rubinius thậm chí không thể bắt đầu cho đến khi Rubinius được phát hành. Tin tốt là mod_rubinius đã có thêm nhân lực đằng sau nó hơn mod_ruby từng có, bởi vì nó đã trả tiền cho các nhà phát triển làm việc trên nó bởi một công ty lưu trữ Rails rằng tuyệt vọng muốn tự sử dụng nó.

4

Có một: mod_ruby nhưng chưa được duy trì trong khoảng 2 năm.

23

Phusion Passenger, một mô-đun Apache mạnh mẽ có thể chạy Rack ứng dụng có cấu hình tối thiểu. Nó đang trở nên hấp dẫn đối với các host chia sẻ, và biến bất kỳ chương trình vào một ứng dụng rack là ridiculously dễ dàng:

Một ứng dụng Kệ là một của Ruby đối tượng (không phải là một lớp) mà phản ứng với call. Phải mất chính xác một đối số, môi trường và trả về một mảng của chính xác ba giá trị: Hiện trạng, các tiêu đề, và cơ thể.

5

Có lẽ giá trị làm rõ gấp đôi điểm mislav mà mod_rails không thực sự giới hạn ở mã Rails. Tên mới, mod_rack, là cách tốt hơn. Trivially ứng dụng nhỏ có thể Rackable - tấm gương của họ là:

class HelloWorld 
    def call(env) 
    [200, {"Content-Type" => "text/plain"}, ["Hello world!"]] 
    end 
end 
0

mod_rails và nó có thể chạy các ứng dụng Rack, nhiều hơn những gì bạn có thể cần?

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