# 🚀 HelpBooost / Simple Blog
Це сучасний блог-платформа, розроблена на **Ruby on Rails 8**.
Проєкт підтримує багатомовність (UK, EN, IT), SEO-оптимізацію, Rich Text редагування та хмарне зберігання файлів.
## 🛠 Технічний стек
* **Backend:** Ruby 3.4, Rails 8.0
* **Database:** PostgreSQL
* **Frontend:** Tailwind CSS, Hotwire (Turbo & Stimulus)
* **Editor:** ActionText (Trix)
* **Storage:** ActiveStorage + Cloudflare R2 (AWS SDK)
* **SEO:** FriendlyId, MetaTags, SitemapGenerator
* **Testing:** RSpec, FactoryBot, Faker
---
## ⚡ Шпаргалка команд (Cheatsheet)
### 🟢 Запуск та Розробка
**Запустити сервер (Rails + CSS watcher):**
```bash
bin/dev
Зайти в консоль (Rails Console):
rails c
# або
rails console
Перевірити маршрути (Routes):
rails routes | grep posts
Запустити міграції (після створення нових):
rails db:migrate
Відкотити останню міграцію (якщо помилився):
rails db:rollback
Заповнити базу тестовими даними (з db/seeds.rb):
rails db:seed
Повне перезавантаження бази (видалити все і створити наново):
rails db:reset
Запустити всі тести:
bundle exec rspec
Запустити тест для конкретного файлу:
bundle exec rspec spec/models/user_spec.rb
Запустити тести, що впали минулого разу:
bundle exec rspec --only-failures
Генерувати карту сайту (Локально, без відправки в Google):
bundle exec rails sitemap:refresh:no_ping
Генерувати карту сайту (На сервері/Production):
bundle exec rails sitemap:refresh
*Карта збережеться в public/sitemap.xml.gz*
Якщо треба перегенерувати слаги для старих записів (наприклад, після зміни логіки), виконай цей скрипт у rails c:
# Для постів (безпечний метод, не ламає картинки)
Post.find_each do |p|
next if p.title.blank?
p.slug = nil
p.send(:set_slug) # Примусова генерація
p.update_column(:slug, p.slug) if p.slug.present?
print "."
end
# Для юзерів
User.find_each do |u|
next if u.username.blank?
u.slug = nil
u.send(:set_slug)
u.update_column(:slug, u.slug) if u.slug.present?
print "."
endЯкщо виникає помилка Aws::S3::Errors::InvalidRequest (checksum conflict), перевір config/storage.yml. Для Cloudflare R2 там мають бути ці рядки:
cloudflare:
service: S3
# ... ключі ...
upload:
checksum_algorithm: "md5" # Важливо для старих SDK
# АБО для нових Rails 8 + AWS SDK v3:
request_checksum_calculation: "when_required"
response_checksum_validation: "when_required"
Перед тим як заливати на продакшн:
- Environment Variables: Переконався, що на сервері прописані:
DATABASE_URLRAILS_MASTER_KEYR2_ACCESS_KEY_IDR2_SECRET_ACCESS_KEYR2_BUCKET_NAMER2_ENDPOINT
- Sitemap config: У
config/sitemap.rbмає стояти реальний домен:
SitemapGenerator::Sitemap.default_host = "[https://helpbooost.com](https://helpbooost.com)"- Robots.txt: Перевір, що в
public/robots.txtє посилання на sitemap і закриті адмінські шляхи. - Після деплою:
- Запустити міграції:
rails db:migrate - Згенерувати карту:
rails sitemap:refresh
Faker::Internet.username— юзернейм (латиницею)Faker::Internet.email— поштаFaker::Lorem.paragraph(sentence_count: 5)— текст для постаFaker::Internet.slug— слаг
### Що робити далі?
1. Створи файл `README.md` у корені проєкту.
2. Встав туди цей текст.
3. Закоміть його: `git add README.md && git commit -m "Add project documentation"`.
Тепер ти не забудеш команди через місяць! 😉