Я хотел бы запустить встроенный код Ruby, встроенный в какую-то веб-страницу html. Есть рубиновые серверы, такие как mongrel, thin, но я просто хотел запустить встроенный ruby в html, не создавая так называемое приложение ruby, соответствующее какой-то структуре, которую я не хочу изучать. Я хочу, чтобы код Ruby действовал как PHP, чтобы я мог получить доступ к базе данных, распечатать формы и так далее.
Какая установка мне нужна?
По общему признанию, я никогда этого не делал, но mod_ruby должен уметь это делать. Если вы можете установить mod_php, вы можете использовать mod_ruby.
Где встроенный PHP выглядит так:
<?php
print("Hello world");
?>
встроенный Ruby будет выглядеть так:
<% var="Hello world %>
<%= var %>
Или что-то подобное; не делал этого в течение некоторого времени ;-) Можно найти больше синтаксиса Вот. Короче говоря: установите mod_ruby, и все будет в порядке.
Вы можете взглянуть на мой ответ на аналогичный вопрос по SO. Это немного похоже на ответ Дэниела, но я создал сценарий ruby-cgi, который творит за вас некоторую "магию".
Sinatra достаточно минимален, чтобы не мешать вам (и не указывать, что делать), но достаточно полнофункциональный, чтобы вы могли начать работу быстро и без особых усилий.
Вы бесплатно получаете маршруты, представления (Erb или HAML / SaSS), помощники, фильтры и поддержку различных адаптеров баз данных. Синатра не делает никаких предположений относительно того, что вы будете делать. Ваш проект может быть настолько простым или сложным, насколько это необходимо. Что еще более важно, документация превосходно и здесь хорошие примеры (реальных проектов!).
Приложения Sinatra легко развертывать с помощью любого совместимого с стойкой HTTP-сервера, такого как Mongrel или Thin.
Два других варианта используют либо Erb и cgi (2) или eruby (3) (если у вас возникли проблемы с установкой mod_ruby):
erb
с *.rb
-контроллер-вроде-из. Это требует двух файлов для страницы, но обеспечивает простое разделение логики и представления (без «фреймворка»).
Его действительно легко настроить, всего одна строка в httpd.conf
или .htaccess
(с учетом прав на исполняемый файл):
AddHandler cgi-script .rb
Ваш mypage.eruby
это php-подобный ERB-шаблон:
<p>Hello <%= foo %>!</p>
Но для этого требуется некоторое кодирование. В твоем mypage.rb
файл:
#!/usr/bin/ruby
require 'cgi'
require 'erb'
# Use cgi for handling params and sending headers etc.
cgi = CGI.new
# connect to db etc.
# prepare variables (Or rather some object to bind to - read docs for that ...)
foo = "World"
# read in your template
template = ERB.new(File.read('mypage.eruby'))
content = template.result
# Print stuff
print cgi.header
print content
Сейчас запрос mypage.rb
Использовать eruby
исполняемый файл (больше похожий на классический php-стиль). Может проще для простых скриптов.
Загрузите исполняемый файл eruby (вероятно, есть двоичный файл для вашей платформы) и скопируйте его в /cgi-bin/eruby
В httpd.conf
:
AddType application/x-httpd-eruby .rhtml
Action application/x-httpd-eruby /cgi-bin/eruby
Затем создайте свой mypage.rhtml
:
<%
# Do ruby stuff here, connect to DB etc.
foo = "World"
%>
<p>Hello <%= foo %>!</p>
Сейчас запрос mypage.rhtml
Я предпочитаю 1, но после установки eruby будет легче начать с 2. Пожалуйста, извините за любые ошибки - я не тестировал предложенную конфигурацию и код.
(Я новичок, чтобы публиковать рабочие ссылки. Буду признателен, если кто-то с разрешениями исправит их.)
Очень простая установка - использовать Пассажир Phusion (сервер веб-приложений, способный запускать любое приложение Ruby Rack, который работает как автономно, так и как модуль apache / ngix) + страницы сервера стойки gem (это небольшое приложение, позволяющее обслуживать простые HTML-страницы со встроенным кодом Ruby).
Используя Passenger в автономном режиме, вам нужно только запустить "пассажирский старт" в корневом каталоге файлов, которые вы хотите обслуживать, и иметь в этой папке файл config.ru всего из двух строк:
require 'rack-server-pages'
run Rack::ServerPages
Теперь вы можете обслуживать любые файлы .erb, поместив их в public
подпапка.
Вы также можете просто запустить "rackup" и позволить страницам обслуживаться выбранным вами ruby-сервером.