Làm cách nào tôi có thể thực thi các tập lệnh Ruby thông qua Apache (không nhất thiết phải sử dụng Rails)?


8

Tôi đang cố gắng để Apache diễn giải các tệp Ruby của mình nhưng tôi không hiểu cách thực hiện. Tôi không quan tâm đến Rails ngay bây giờ, chỉ có Ruby. Những gì tôi tìm thấy bởi Googling chỉ làm tôi bối rối. Có lời khuyên nào không?

Câu trả lời:


3

Cách phổ biến nhất để chạy mã ruby ​​trong môi trường máy chủ web là sử dụng mã thực hiện giao diện rack. Đây là một API rất đơn giản cho phép máy chủ web nói chuyện với ứng dụng ruby ​​của bạn. Đối với Apache, trình xử lý rack phổ biến nhất là hành khách (hay còn gọi là mod_rails và mod_rack). Hầu như tất cả các khung web ruby ​​hiện tại (như đường ray, sinatra, cắm trại, ...) kết nối với máy chủ web bằng trình xử lý rack. Bạn có thể sử dụng một trong các khung đó, nhưng bạn cũng có thể viết các ứng dụng rack trực tiếp mà không cần các khung đó. Tất cả các máy chủ ứng dụng ruby ​​(mongrel, mỏng, kỳ lân, cầu vồng, ...) đều thực hiện giao diện rack.

Một cách khác là sử dụng (f) cgi, nhưng tôi khuyên bạn nên tránh xa tuyến đường đó, vì giao diện và giao thức rất khó xử và không thực sự cung cấp các phương tiện quản lý hiện đại.


2

Tôi đã cố gắng tìm câu trả lời đơn giản cho câu hỏi này một thời gian và nhận ra tất cả những gì bạn phải làm là đặt tập lệnh ruby ​​vào thư mục cgi-bin của máy chủ web của bạn và tải URL tương ứng. Vì vậy, ví dụ, trong CentOS 6.2 mặc định của tôi / httpd cài đặt, tôi đặt một kịch bản gọi là hello.rb trong / var / www / cgi-bin / và sau đó tải lên http: //localhost/cgi-bin/hello.rb trong tôi trình duyệt và nó đã thực thi tập lệnh và chỉ cho tôi những gì đã đi đến STDOUT (tức là từ đặt, v.v.).

Điều xảy ra ở đây là mỗi khi URL được tải, tập lệnh chạy hoàn toàn. Điều này không lý tưởng cho một máy chủ web có dung lượng lớn hoặc tốc độ rất quan trọng - vì vậy một cái gì đó như fastCGI giữ cho tập lệnh luôn chạy, nhưng bạn phải viết tập lệnh để xử lý điều đó.

Hy vọng rằng sẽ giúp.



0

Hãy thử modruby .


Tôi đã thử nó. Nó không làm gì cả và nếu có bất kỳ tài liệu nào, họ đã làm rất tốt để che giấu nó.
Jason Swett


Điều đó cũng không hiệu quả. Invalid command 'RubyAddPath'Đây có phải là một số điều bí truyền không ai từng làm? Tôi ngạc nhiên về việc Ruby làm việc với Apache khó như thế nào so với PHP.
Jason Swett

Thêm "LoadModule ruby_module" path_to_mod / mod_ruby.so "
alvosu

Thêm AddHandler ruby-object .rbx, LoadModule ruby_module /path/to/mod_ruby, RubyRequire apache/ruby-run, và RubyHandler Apache::RubyRun.instanceđể httpd.confnên là đủ cho một cấu hình đơn giản.
Chris S
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.