Минулого тижня у Flatiron School ми вивчали веб-фреймворки (web frameworks) для Ruby. Ми розпочали тиждень із Rack, потім перейшли до Sinatra, а далі — до Rails. Все це за один тиждень! Три фреймворки за тиждень? Чому?
Sinatra та Rails обидва використовують Rack для автоматизації багатьох операцій розробки веб-сервісів. Основна причина вивчення всіх цих фреймворків — зрозуміти, що відбувається "під капотом". Адже спочатку потрібно навчитися повзати, потім ходити, а вже потім бігати!
Нижче я продемонструю базові кроки для кожного з фреймворків, щоб рендерити статичну сторінку з текстом “Hello World!”.
Початковий етап: Rack
Спершу пройдемо через налаштування Rack.
-
Спочатку створюємо щось (наприклад, клас), що відповідатиме методу
call
. -
Метод
call
повинен повертати масив із трьома елементами:
- Код статусу HTTP, наприклад
200
- Хеш із ключем
"Content-Type"
і відповідним значенням, наприклад Text/HTML - Щось, наприклад масив, що відповідає
each
і містить тип"Content-Type"
Нижче приклад, як це може виглядати. Ми можемо створити це в my_server.rb
:
require 'rack'class MyServer
def call
return [200, {"Content-Type" =>"plain/text"}, ["Hello World!"]]
end
end
Потім потрібно створити файл rackup із кодом налаштування сервера. Цей файл має мати розширення .ru.
require_relative'./my_server'
run MyServer.new
Запустіть цей код, виконавши в командному рядку:
$rackup file_name.ru
Перейшовши на кореневий URL ‘/’, ви побачите Hello World!, надруковане вашим веб-сервером!
Наступний крок: Sinatra
Далі подивимось, як Sinatra спрощує процес роботи з Rack.
- Спочатку нам потрібен файл
config.ru
, щоб вказати Rack необхідні середовища та запустити застосунок. Файл може виглядати так:
require 'sinatra'
require_relative'./app.rb'
run Application
config.ru
вимагає валідного контролера Sinatra для запуску. Контролер Sinatra — це Ruby-клас, що наслідує відSinatra::Base
і забезпечує сумісний із Rack інтерфейс. Потім ми визначаємо HTTP-метод і маршрут у методі, наприклад:
class Application< Sinatra::Base
get'/' do
"Hello, World!"
end
end
Після запуску локального сервера для тестування застосунку в браузері ви побачите Hello World! на кореневому URL ‘/’.
Це набагато простіше… Sinatra знає, як обробляти код статусу та тип контенту! Але йдемо далі!
Наступний рівень: Rails
Тепер ми дійшли до Rails! Rails зосереджується на фреймворку MVC, щоб зробити процес ще ефективнішим. Розпочнемо, створивши проект Rails командою rails new hello_world
.
- Налаштуємо маршрут, відкривши файл
config/routes.rb
і додавши такий маршрут у блокdraw
:
get '/hello_world', to: 'static#hello_world'
- Додамо новий контролер для нашої статичної сторінки, створивши новий файл у застосунку:
app/controllers/static_controller.rb
. Щоб використовувати методи, вбудовані в систему контролерів Rails, контролер буде наслідувати від application controller. Потім включимо відповідний маршрут як метод:
class StaticController Hello World!
Тепер ви побачите Hello World! за маршрутом /hello_world!
Висновок
Хоча і Sinatra, і Rails використовують Rack, Sinatra ідеально підходить для розуміння, як працюють HTTP-запити та маршрутизація, тоді як Rails краще підходить для автоматизації цих процесів.
Rails також стандартизує процес веб-розробки за допомогою фреймворку MVC. Це робить перехід до інших застосунків на Rails простим! Усе має своє місце, і ви завжди знатимете, де це знайти! Позбавляючи розробників від рутинної роботи, Rails дозволяє зосередитися на вирішенні більших проблем! І я з нетерпінням чекаю можливості дізнатися більше про Rails і побачити, куди це мене приведе!
Перекладено з: Hello World, Hey World, Hi World: From Rack to Sinatra to Rails