2009-10-13 12 views
5

Naprawdę chcę uruchomić trochę kodu ruby ​​na serwerze Apache. Zainstalowałem libapache2-mod-ruby i libapache-ruby1.8 (pełna lista tego, co jest zainstalowane to here). Co mam teraz zrobić, aby go uruchomić (przykład)?Ruby na Apache z mod_ruby

Odpowiedz

2

Mod-ruby nie jest tak naprawdę preferowanym sposobem, aby przejść do społeczności rubinów.

Najprostszy sposób na zainstalowanie pasażera (klejnot) i skonfigurowanie go do użycia.

To jest naprawdę łatwe do zrobienia,

można śledzić oficjalny samouczek tutaj: http://www.modrails.com/install.html

+2

Pasażer wydaje się być dla Railsów - czy tego chce @folone? –

+0

Jestem z Brentem. Istnieje wiele zastosowań wstawiania Ruby w trakcie żądania Apache (uwierzytelnianie, autoryzacja, utrwalanie nieprawidłowo wygenerowanych żądań itd.), A nie jako adapter punktu końcowego - czyli to, co robią razem Passenger + Rails. –

3

Oto quick howto dostać mod_ruby uruchomiony. Krótkie podsumowanie etapów użyłem na Ubuntu 12.04 są replikowane tutaj:

Install mod_ruby dla apache:

sudo apt-get install libapache2-mod-ruby 

Aby umożliwić mod_ruby dla wszystkich plików w katalogu/var/www, edytować plik konfiguracyjny apache, czyli /etc/apache2/sites-enabled/000-default

musiałem dodać +ExecCGI do Options i dodać sekcję przekazywanych 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> 

Główną wadą, którą widzę, jest to, że nie mogę znaleźć sposobu na ustawienie typu mime/treści z poziomu skryptu. Musisz ustawić go globalnie dla wszystkich skryptów ruby ​​z dyrektywą AddType text/html rb.

Wreszcie, potrzebujesz skryptu testowego w/var/www i musi on być wykonywalny. Na przykład, mam /var/www/test.rb:

#!/usr/bin/ruby 

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

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

puts "</pre>" 

Nie zapomnij, aby go wykonywalnym:

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

A to wyjścia:

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 

mam uruchomić odniesienia Apache na mod_ruby vs. prosta Ruby jako CGI (która obraca interpreter Ruby dla każdego żądania) i mod_ruby była około 8 razy szybsza i równała się wydajności PHP.