Sinatra – это простой легковесный фреймворк, написанный в Ruby.
Примечание: Для выполнения руководства нужно установить Ruby и RubyGems (об этом речь пойдёт в отдельном разделе), а также уметь с ними обращаться. Рекомендуется использовать RVM.
Краткий обзор Sinatra
Как и Ruby on Rails, Sinatra является веб-фреймворком. В отличие от Ruby on Rails, Sinatra намного легче, использует меньше ресурсов и предоставляет более точный контроль над веб-приложением. Кроме того, у него нет встроенной базы данных или рендеринга – все это делается вручную.
Преимущества Sinatra
Этот фреймворк быстрый, простой и производительный. Однако он требует больше работы и внимания от разработчика (поскольку вероятность допустить ошибку высока).
Sinatra, как правило, используется для построения небольших веб-приложений без наворотов (список разработанных в нем проектов можно просмотреть здесь). Часто в нём собирают специализированные приложения. Sinatra позволяет даже собрать простой фронт-энд Jekyll.
Установка Ruby и RubyGems
Ruby и RubyGems проще всего установить при помощи инструмента RVM (Ruby Version Manager). RVM позволяет устанавливать и управлять несколькими версиями Ruby с индивидуальными gemset-ами в рамках одной системы. Чтобы установить последнюю версию RVM и Ruby 2.0.0, запустите:
\curl -L https://get.rvm.io | bash -s stable --ruby=2.0.0
Примечание: Чтобы установить другую версию, просто укажите её номер.
Эта команда установит RVM только для пользователя, запустившего её. Чтобы установить RVM глобально, добавьте sudo перед bash:
\curl -L https://get.rvm.io | sudo bash -s stable --ruby=2.0.0
Если двоичные файлы Ruby доступны для вашей системы или облачного сервера (что вероятнее всего), то они будет загружены и установлены. В противном случае нужно собрать Ruby из исходников. Это может занять некоторое время.
После завершения установки выйдите и снова войдите в систему. после этого будет предложено запустить команду:
source ~/.rvm/scripts/rvm
Эта команда загружает RVM в текущий терминал. Если всё работает должным образом, вам не придётся запускать эту команду для каждого нового терминала. Однако если программа постоянно предлагает запускать её, добавьте её в файл запуска (.bashrc или .zshrc).
Установка gem-а Sinatra
Как и любой другой gem, Sinatra устанавливается при помощи простой команды:
gem install sinatra
Это всё, что нужно. Теперь фреймворк Sinatra установлен.
Начало работы с Sinatra
Теперь попробуйте создать простое и понятное приложение в Sinatra. Приложения заключены в классы Ruby. Перед вами простое приложение из двух файлов:
# app.rb
require 'sinatra'
class HelloWorldApp < Sinatra::Base
get '/' do
"Hello, world!"
end
end
# config.ru
require './app'
run HelloWorldApp
Внеся соответствующий код в файлы app.rb и config.ru (при помощи любого удобного текстового редактора), запустите приложение из папки (к примеру: /home/user/code/my_sinatra_app):
rackup
Это запустит библиотеку WEBrick, которая обслуживает приложение. Обратите внимание: WEBrick сообщает IP и порт, которые она обслуживает; запишите эти данные. Получить доступ к приложению можно по:
http://IP:порт
Анализ кода простого приложения Sinatra
В Sinatra каждый блок get (или post, put, и т.д.) определяет каждый маршрут ответ приложения на конкретные запросы HTTP. В данном случае код определяет, что произойдёт, когда пользователь запрашивает корневой каталог приложения (или /).
Параметры приложения Sinatra
Теперь попробуйте задать этому приложению параметр.
# app.rb
require 'sinatra'
class HelloWorldApp < Sinatra::Base
get '/' do
"Hello, world!"
end
get '/:name' do
"Hello, #{params[:name]}!"
end
end
Параметры URL задаются при помощи :param и хранятся в params в коде Ruby.
Этот код определяет два маршрута: один к корневому каталогу (/), а второй – к каталогу /:name. Однако это можно свести к одному маршруту, который будет проверять на наличие параметра name.
# app.rb
require 'sinatra'
class HelloWorldApp < Sinatra::Base
get '/?:name?' do
"Hello, #{params[:name] ? params[:name] : 'world'}!"
end
end
Этот код несколько сложнее. Чтобы обозначить опциональные параметры, окружите их вопросительными знаками. Затем используется тернарный оператор, который ищет params[:name].
Но как структурировать приложение, чтобы уточнить, кому адресовано приветствие? Рассмотрите следующий код:
# app.rb
require 'sinatra'
class HelloWorldApp < Sinatra::Base
get '/:greeting/?:name?' do
"#{params[:greeting]}, #{params[:name] ? params[:name] : 'world'}!"
end
end
Теперь просто откройте http://yoursever:port/Aloha/Timothy, и вы увидите, что приветствие адресовано Mr Timothy.
Примечание: Это руководство охватывает только основы работы с фреймворком Sinatra. Боле подробную информацию можно найти в этом руководстве.