2009-10-13 23 views
5

Tôi thực sự muốn chạy một số mã ruby ​​trên máy chủ Apache. Tôi đã cài đặt libapache2-mod-rubylibapache-ruby1.8 (danh sách đầy đủ những gì được cài đặt là here). Tôi phải làm gì bây giờ để chạy nó (here`s một ví dụ)?Ruby trên Apache với mod_ruby

Trả lời

2

mod-ruby không thực sự là cách ưa thích để tham gia cộng đồng Ruby.

Cách dễ nhất để bạn bắt đầu cài đặt hành khách (trough gem) và định cấu hình apache để sử dụng nó.

Nó là rất dễ dàng để làm,

bạn có thể làm theo các hướng dẫn chính thức ở đây: http://www.modrails.com/install.html

+2

Hành khách dường như là dành cho Rails - đó là những gì @folone muốn? –

+0

Tôi với Brent. Có nhiều cách sử dụng để chèn Ruby vào giữa một yêu cầu Apache (xác thực, ủy quyền, sửa chữa các yêu cầu không đúng định dạng, v.v.) thay vì làm bộ chuyển đổi điểm cuối - đó là, những gì Hành khách + Đường ray làm cùng nhau. –

3

Dưới đây là một quick howto để có được mod_ruby lên và chạy. Một bản tóm tắt ngắn các bước tôi đã sử dụng trên Ubuntu 12.04 được sao chép ở đây:

Cài đặt mod_ruby cho apache:

sudo apt-get install libapache2-mod-ruby 

Để kích hoạt mod_ruby cho tất cả các file trong/var/www, chỉnh sửa tập tin cấu hình apache của bạn, ví dụ: /etc/apache2/sites-enabled/000-default

tôi đã có thêm +ExecCGI-Options, và thêm phần liên quan đến Ruby:

<Directory /var/www/> 
    Options Indexes +ExecCGI 

    # Ruby with mod_ruby 
    RubyRequire apache/ruby-run 
    <Files *.rb> 
     SetHandler ruby-object 
     RubyHandler Apache::RubyRun.instance 
     AddType text/html rb 
    </Files> 
</Directory> 

Hạn chế chính mà tôi thấy là tôi dường như không thể tìm cách thiết lập loại mime/content từ bên trong kịch bản lệnh. Bạn phải đặt nó trên toàn cầu cho tất cả các tập lệnh ruby ​​với chỉ thị AddType text/html rb.

Cuối cùng, bạn cần một tập lệnh thử nghiệm trong/var/www và nó phải được thực thi. Ví dụ, tôi có /var/www/test.rb:

#!/usr/bin/ruby 

puts "Hello World!<br><pre>" 

ENV.each { |k,v| 
    puts "#{k}=#{v}" 
} 

puts "</pre>" 

Đừng quên để làm cho nó thực thi:

chmod a+x /var/www/test.rb 

Và kết quả đầu ra này:

Hello World! 
HTTP_HOST=10.0.1.3 
HTTP_CONNECTION=keep-alive 
HTTP_CACHE_CONTROL=max-age=0 
HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
HTTP_USER_AGENT=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36 
HTTP_ACCEPT_ENCODING=gzip,deflate,sdch 
HTTP_ACCEPT_LANGUAGE=en-US,en;q=0.8 
HTTP_COOKIE=__test=1; 
PATH=/bin:/usr/bin:/usr/ucb:/usr/bsd:/usr/local/bin 
SERVER_SIGNATURE= 
Apache/2.2.22 (Ubuntu) Server at 10.0.1.3 Port 80 

SERVER_SOFTWARE=Apache/2.2.22 (Ubuntu) 
SERVER_NAME=10.0.1.3 
SERVER_ADDR=10.0.1.3 
SERVER_PORT=80 
REMOTE_ADDR=10.0.1.3 
DOCUMENT_ROOT=/var/www 
[email protected] 
SCRIPT_FILENAME=/var/www/test.rb 
REMOTE_PORT=38188 
SERVER_PROTOCOL=HTTP/1.1 
REQUEST_METHOD=GET 
REQUEST_URI=/test.rb 
SCRIPT_NAME=/test.rb 
MOD_RUBY=mod_ruby/1.2.6 
GATEWAY_INTERFACE=CGI-Ruby/1.1 

tôi đã chạy một điểm chuẩn Apache trên mod_ruby so với Ruby đơn giản như CGI (mà xoay vòng trình thông dịch Ruby mỗi yêu cầu) và mod_ruby nhanh hơn khoảng 8 lần và ngang bằng với hiệu năng PHP.