В цій статі ми розглянемо встановлення і настройку Web-сервера
Apache 2,
Ruby 1.8 (
mod_ruby + eruby) для використання на локальній машині під ОС
Linux (
Ubuntu/Debian).
Інсталяція:
Для початку необхідно встановити всі необхідні пакети:
$ sudo apt-get install ruby
$ sudo apt-get install apache2
$ sudo apt-get install libapache2-mod-ruby eruby
Я буду використовувати конфігурацію
Apache "по замовчуванню".
Після інсталяції
mod_ruby, автоматично буде створений файл
/etc/apache2/mods-available/ruby.load з таким вмістом:
LoadModule ruby_module /usr/lib/apache2/modules/mod_ruby.so
Настройка:В дистрибутивах
Ubuntu/Debian(можливо і в інших) конфігураційний файл
httpd.conf розбитий на велику кількість менших файлів у директорії
/etc/apache2.
Для конфігурації
mod_ruby створимо файл
/etc/apache2/mods-available/ruby.conf. Також необхідно створити посилання на нього до каталогу
/etc/apache2/mods-enabled, щоб він завантажувався автоматично.
sudo ln -s /etc/apache2/mods-available/ruby.conf /etc/apache2/mods-enabled/ruby.conf
З докладним описом процесу інсталяції і настройки можна ознайомитися
тут .
Я буду використовувати зв'язку
eRuby + mod_ruby.eruby - це виконання
eRuby(Embedded Ruby), що служить для включення коду
Ruby у
HTML та інші документи. Має розширення
*.rhtml. Код включається за допомогою пари роздільників "
<%" і "
%>". Коли мене запитують про
eRuby, я завжди відповідаю що це типу
PHP, тільки для
Ruby :). Докладніше про
eRuby тут i
тут .
Додамо наступні рядки до
/etc/apache2/mods-available/ruby.conf.
<IfModule mod_ruby.c>
RubyRequire apache/eruby-run
# Обробляти файлами з директорій /eruby як файли eRuby
<Location /eruby>
SetHandler ruby-object
RubyHandler Apache::ERubyRun.instance
</Location>
# Обробляти *.rhtml файли як eRuby файли
<Files *.rhtml>
SetHandler ruby-object
RubyHandler Apache::ERubyRun.instance
</Files>
</IfModule>
<Directory /var/www/eruby>
AllowOverride All
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
AddType text/html .rhtml
Існує одна проблема, коли ви здійснюєте запит до директорії(наприклад,
http://localhost/eruby),
mod_ruby викликає помилку (щось типу /
usr/lib/ruby/1.8/apache/eruby-run.rb:101:in `compile_file': Is a directory - /var/www/eruby/ (Errno::EISDIR). Щоб виправити це додамо наступний рядок до
ruby.conf .
RedirectMatch ^/eruby/?$ /eruby/index.rhtml
Перезапустимо веб-сервер командою:
$ sudo /etc/init.d/apache2 restart
Створимо файл
/var/www/eruby/index.rhtml:
<%= Time.now %>
Перейдемо у Web-броузері за адресою
http://localhost/eruby і побачимо поточну дату і час.
Вуаля, готово!
Відображення помилок mod_ruby:mod_ruby не терпить невдачу з попередженнями(
warnings) і повідомлення про попередження не записуються до log-файлу (наприклад,
/var/log/apache2/error.log чи будь-який інший), тільки повідомлення про помилки записуються до цього файлу. Так що забудьте про попередження під
mod_ruby. Можливо є якийсь діагностичний рівень, на якому це можна встановити, але мені не відомо про це :(.
Коли
Ruby зазнає синтаксичну або іншу помилку він повертає "
Internal Server Error (500)" і повідомлення про помилку записується до log-файлу
Apache. Щоб постійно слідкувати за помилками доводиться читати цей файл або використовувати утиліту
tail:
$ sudo tail -f /var/log/apache2/error.log
Постійно доводиться переключатися у консоль, шо не дуже зручно у процесі написання коду.
Для виведення помилок на Web-сторінку використовується опція
ErrorDocument Apache.Створимо файл
/var/www/eruby/errors/error_500.rhtml:
<%
r = Apache.request
r.content_type = "text/plain"
r.send_http_header
print "Ruby Error: ",r.prev.uri,"\n\n"
print r.prev.error_message
%>
І додамо у
/etc/apache2/mods-available/ruby.conf наступний рядок.
ErrorDocument 500 /eruby/errors/error_500.rhtml
Перезапустимо Apache:
$ sudo /etc/init.d/apache2 restart
Тепер при виникненні помилки(але не попередження) фактичне повідомлення про невдачу буде показане не сторінці. Рекомендую використовувати даний метод лише під час розробки і відналагодження.