Như phổ biến như Ruby và Rails, có vẻ như vấn đề này đã được giải quyết. JRuby và mod_rails là tất cả tốt và dandy, nhưng tại sao không có một mod Apache cho chỉ Ruby thẳng?Tại sao không có một mod_ruby khả thi cho Apache?
Trả lời
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ó.
Có một: mod_ruby nhưng chưa được duy trì trong khoảng 2 năm.
Có 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ể.
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
- 1. Ruby trên Apache với mod_ruby
- 2. Tại sao Rails không thể làm việc với mod_ruby?
- 3. MVVM có khả thi/khả thi trong ứng dụng DHTML RIA (không có Silverlight/WPF) không?
- 4. Có tích hợp SCC khả thi cho Subversion không?
- 5. Tại sao chính xác một khi ngữ nghĩa không khả thi?
- 6. Bcrypt có khả thi cho các trang web lớn không?
- 7. Tại sao Intellisense "Không khả dụng cho C++/CLI"?
- 8. Tại sao Apache + PHP yêu cầu quyền thực thi để ghi vào một tệp?
- 9. Tại sao bằng cách sử dụng Đếm với IQueryable được coi là không khả thi
- 10. Có khả thi để ảo hóa máy phát triển không?
- 11. Tại sao thực thi không đúng (export_all)?
- 12. Java OO: Điều này có khả thi không?
- 13. Java RMI với Scala, điều này có khả thi không?
- 14. Có khả năng một khối cuối cùng có thể không thực thi không?
- 15. Điều này có khả thi với sql không?
- 16. Ruby Reverse Currying: Điều này có khả thi không?
- 17. Tại sao tôi không thể tắt .htaccess trong Apache?
- 18. Tại sao Java thực thi khả năng tương thích kiểu trả về cho các phương thức tĩnh bị ghi đè?
- 19. Tại sao Redis có khả năng Pub/Sub?
- 20. Smalltalk có phải là ngôn ngữ phát triển khả thi cho Mac OS X không?
- 21. Tại sao var_dump một Doctrine Objects giết Apache của tôi?
- 22. Tại sao tôi nhận được 'Ghi nhật ký nhị phân không khả thi'. trên máy chủ MySQL của tôi?
- 23. Tại sao không có NSArrayController cho iPhone?
- 24. Có lưu trữ ứng dụng Ruby trên Windows Server một thiết lập khả thi không?
- 25. Java + SQL Server - một giải pháp khả thi?
- 26. TRIGGERs khiến INSERT bị lỗi? Khả thi?
- 27. Tại sao Clojure không thực thi chức năng này?
- 28. Có khả thi để tạo một máy khách REST với Flex không?
- 29. Android AsyncTask - tại sao doInBackground() không được thực thi?
- 30. Tại sao IO không được thực thi theo thứ tự?