На мою думку, одним із найвиснажливіших, але важливих етапів створення нового проєкту на будь-якій мові, фреймворку чи бібліотеці є процес створення або налаштування. Забувши один елемент, ви можете зіткнутися з проблемами у майбутньому і витратити цінний час на налагодження та виправлення. Тож ось простий посібник, як я налаштовую свої застосунки на Sinatra.
Структура файлів
Перший крок — створення структури файлів. Це можна зробити вручну, але це забирає багато часу і схильне до помилок. Або ж можна зробити це автоматично за допомогою гемів (gems) Corneal. Основна функція Corneal — створити всі файли та директорії, необхідні для роботи застосунку на Sinatra. Його можна встановити за допомогою команди $gem install corneal
і створити новий застосунок командою $corneal new APPNAMEHERE
. Якщо ви використовуєте GitHub, краще спершу створити репозиторій, клонувати його, а потім створити застосунок Sinatra, використовуючи ту ж назву, що й у репозиторія. Таким чином ваш проєкт матиме налаштований Git, і ви зможете додати решту файлів пізніше.
Після налаштування застосунку слід запустити $bundle install
, щоб встановити всі геми з Gemfile.
База даних
Тепер час створити міграцію. Використовуючи $rake db:create_migration NAME=migration_name_here
, ви можете створити файл міграції за допомогою Rake. Після того, як усі ваші міграції написані та завершені, виконайте команду $rake db:migrate
, щоб застосувати міграції.
Дуже важливо створити початкові дані (seed data). Створіть файл seeds.rb
у директорії db і напишіть код, який створює записи. Потім запустіть $rake db:seed
, щоб заповнити базу даних тестовими даними. Це ідеально підходить для тестування вашої бази даних під час розробки.
Безпека
Дуже важливо хешувати конфіденційну інформацію, щоб запобігти доступу сторонніх осіб. Sinatra робить це просто. Додайте макрос has_secure_password
до класу User, і це дозволить автоматично хешувати паролі за допомогою bcrypt, якщо у вашій таблиці Users є стовпець password_digest
типу string. Метод .authenticate(params[:password])
можна викликати на класі зі стовпцем password_digest
, і він поверне true або false залежно від того, чи збігаються паролі.
Сесії
Сесії за замовчуванням не увімкнені в Sinatra, тому їх потрібно ввімкнути! Це можна зробити, додавши enable :sessions
і set :session_secret, “supersecretstringhere"
у блок configure
у файлі application_controller.rb. Переконайтеся, що сесійний ключ є складним і його важко підібрати методами brute force або dictionary attack. Це надзвичайно важливо, оскільки сесійні ключі використовуються для шифрування файлів cookie. Якщо зловмисник отримає доступ до сесійного ключа, він зможе створювати власні cookie, видаючи себе за користувачів і надсилаючи шкідливі запити. Детальніше про сесійні ключі можна прочитати в цій статті.
Контролери
Під час роботи з контролерами краще розділяти маршрути на окремі файли контролерів відповідно до їхніх моделей. Таким чином усе буде більш організовано і читати код стане простіше. Для кожного нового файлу контролера потрібно додати рядок use ClassNameController
у ваш файл config.ru
. Переконайтеся, що ці рядки розташовані вище за $run ApplicationController
, і все буде готово! Також важливо додати use Rack::MethodOverride
на початку всіх рядків use
. Це дозволяє створювати маршрути, які не підтримуються Sinatra "з коробки", наприклад patch і delete.
І це все! Тепер ви готові створювати свій новий чудовий застосунок на Sinatra.
Перекладено з: Setting Up a Sinatra App