Як я створив платформу SaaS, працюючи на повний робочий день, за допомогою Ruby on Rails

pic

Інтелект рекламодавців HiEnergy Rocket

Створення платформи Software-as-a-Service (SaaS) вимагає балансу між технічною ефективністю, масштабованістю та орієнтацією на користувача. HiEnergy Rocket Advertiser Intelligence була задумана як рішення на базі штучного інтелекту для оптимізації пошуку та аналізу афілійованих маркетингових програм.

Цю платформу я створював під час своїх ночей і вихідних у співпраці з моїми співзасновниками в HiEnergy Agency: Dexter Dethmers, колишнім керівником у Honey та CJ, і Jen Goodwin, досвідченим лідером з великим досвідом роботи в CJ. Разом ми поєднали наші знання для створення платформи, яка спрощує пошук афілійованих програм, зберігаючи при цьому акцент на зручності та … Читати далі

Оновлення до HTTP/3 з Nginx на Ubuntu 20.04: Виклики, виправлення та робоча конфігурація

pic

Нещодавно я оновлював Rails разом з багатьма пов'язаними гемами, що використовуються в нашому проєкті. Разом з оновленням Rails я також вирішив оновити HTTP/2 до HTTP/3, оскільки це значно покращує продуктивність вебу та дозволяє більш ефективно передавати дані, особливо в умовах поганих мереж.

Однак процес не був таким плавним, як я очікував, на відміну від оновлення до HTTP/2. NGINX не зміг запуститися після оновлення Nginx і оновлення конфігурації.

Моя серверна конфігурація — Ubuntu 20.04 з Nginx 1.18. Ось кроки для налаштування HTTP/3 на старішій конфігурації, як у мене:

Кроки для налаштування HTTP/3

  1. Оновіть Nginx
  2. Оновіть конфігурацію Nginx
  3. Тестуйте
Читати далі

Налаштування нового додатка Rails 8 з Vite, React і TypeScript

Під час налаштування нового додатка Rails з Vue та TypeScript я зіткнувся з кількома труднощами. Щоб спростити процес для інших, я вирішив створити цей покроковий посібник по налаштуванню Hello World React додатку з Rails.

Чому обирати Vite замість інших бандлерів?

Vite вирізняється своєю швидкістю, простотою та ефективністю. На відміну від традиційних бандлерів, Vite пропонує:

  • Автоматичну заміну гарячих модулів (HMR): Миттєве оновлення лише змінених компонентів без перезавантаження всієї сторінки.
  • Неймовірно швидкий старт і компіляція: Vite оптимізує процес розробки, оновлюючи лише змінені файли, а не перебудовуючи весь додаток.

Попередні вимоги

Перед налаштуванням додатку переконайтесь, що у вас встановлене наступне:

  • Rails 8
Читати далі

Чому ваше проектування URL таке погане?


pic

Leapcell: Платформа нового покоління для безсерверного хостингу веб-сайтів, асинхронних завдань та Redis

Специфікації URL та найкращі практики в проектуванні API

I. Основне значення проектування URL

У проектуванні API, URL є не лише засобом для пошуку ресурсів, але й візуальним представленням архітектури системи. Нерегулярний URL може призвести до наступних проблем:

  • Технічна неоднозначність: Помилки при розпізнаванні шляху, викликані чутливістю до регістру (наприклад, /systemMem проти /systemmem).
  • Досвід користувача: Довгі та громіздкі шляхи (наприклад, /servlet/.../business_temp/2/2/5/) збільшують вартість запам’ятовування.
  • Адаптація до сценаріїв: Спеціальні символи (наприклад, _, +, ~) можуть створювати проблеми при друці або скануванні.
  • Вартість обслуговування
Читати далі

Однопоточність проти багатопоточності в Ruby on Rails 🔥🔥

Ruby on Rails за замовчуванням працює в однопоточному режимі, але він може бути багатопотоковим в залежності від веб-сервера та конфігурації.

🔹 1️⃣ Що таке однопоточність в Rails?

📌 Визначення:

  • Однопоточний додаток Rails обробляє тільки один запит за раз для кожного робітника.
  • Якщо один запит повільний, інші повинні чекати, поки він не завершиться.

📌 Як це працює:

  • За замовчуванням Ruby MRI (Matz’s Ruby Interpreter) має глобальний блокувальник інтерпретатора (GIL), що означає, що лише один потік виконує Ruby код одночасно.
  • Навіть якщо ви увімкнете кілька потоків, GIL Ruby не дозволяє справжнє паралельне виконання Ruby коду.

📌 Приклад однопотокового Читати далі

Налаштування Swagger в Rails без RSpec за допомогою Rswag

Swagger надає інтерактивний інтерфейс документації API, який полегшує дослідження та тестування точок доступу API. Зазвичай, Rswag генерує документацію Swagger з тестів RSpec, але якщо ви не хочете писати специфікації, ви можете вручну створити та налаштувати документацію. Цей посібник проведе вас через процес встановлення Rswag та налаштування Swagger UI без написання специфікацій.

1. Встановлення гемів Rswag

Спочатку додайте необхідні геми до вашого Gemfile:

gem 'rswag-api'  
gem 'rswag-ui'  
gem 'rswag-specs' # Необов'язково, якщо не використовуєте RSpec

Далі встановіть геми за допомогою:

bundle install

Після встановлення, запустіть установник Rswag для налаштування необхідних файлів:

rails g rswag:install

2. Увімкнення Swagger UI в

Читати далі

Map, Reduce та Select в Ruby

Вступ

Бібліотека Ruby включає модуль Enumerable, який надає потужні методи, такі як map, reduce та select. Ці функції дозволяють ефективно перетворювати та маніпулювати даними.

До кінця цієї серії ви навчитеся розбивати задачі обробки даних на чіткі, легкі для налагодження та комбіновані етапи. Це зробить ваш код на Ruby більш ефективним, елегантним і надійним.

Цей посібник розглядає основні операції IRB, включаючи визначення методів, використання map, reduce і select.

pic

На основі: цієї книги від Джей Годсе — Ефективне перетворення та маніпулювання даними в Ruby — тип: irb

Почнемо!

Примітка: якщо ви застрягли, будь ласка, подивіться мій репозиторійЧитати далі

Go проти Ruby: Чому Go використовує значно менше пам’яті?

Коли я вирішував задачу перевірки, чи є число паліндромом, я реалізував однакову логіку як в Go, так і в Ruby. Результати були вражаючими — Go використав лише 6.03 MB пам'яті, тоді як Ruby спожив вражаючі 211.55 MB, що приблизно в 35 разів більше! Це змусило мене дослідити, чому Go є набагато більш ефективним за пам'яттю порівняно з Ruby.

Докази

pic

Реалізація на Go

pic

Реалізація на Ruby

Код

Реалізація на Go:

func isPalindrome(x int) bool {  
 if x < 0 {  
 return false // Від'ємні числа не є паліндромами  
 }  
 tmp := x  
 rev := 0  
 for tmp > 0 
Читати далі

Символи проти рядків у Ruby

У Ruby символи (:symbol) та рядки ("string") використовуються для представлення тексту, але вони поводяться по-різному щодо продуктивності, змінності та використання пам'яті. Ось розбір:

1. Непорушність та Унікальність

  • Символи (:symbol) непорушні та унікальні. Кожне виникнення того самого символу посилається на один і той самий об'єкт.
  • Рядки ("string") змінні, і різні екземпляри з однаковим значенням є різними об'єктами.
:hello.object_id == :hello.object_id # => true (один і той самий об'єкт)  
"hello".object_id == "hello".object_id # => false (різні об'єкти)

2. Продуктивність та Ефективність використання пам'яті

  • Символи більш ефективні по пам'яті, оскільки вони зберігаються лише
Читати далі

Повний посібник по асоціаціям один-до-одного в Ruby on Rails (has_one та belongs_to)

У цьому посібнику ми розглянемо один-до-одного асоціації в Rails за допомогою has_one та belongs_to. Ми охопимо:

1️⃣ Вступ

2️⃣ Коли використовувати has_one та belongs_to
3️⃣ Налаштування один-до-одного асоціації
4️⃣ Визначення асоціацій
5️⃣ Створення та доступ до даних
6️⃣ Налаштування асоціацій
7️⃣ Запит один-до-одного асоціацій
8️⃣ Обробка видалення (dependent опція)
9️⃣ Повний приклад з міграціями
🔟 Висновок

1️⃣ Вступ

У Rails один-до-одного відношення означає, що один запис в таблиці пов'язаний з рівно одним записом в іншій таблиці.
Це реалізовано за допомогою has_one та belongs_to.

2️⃣ Коли використовувати has_one та belongs_to

| Асоціація | Модель | Чужий ключ? | … Читати далі