Современное веб-приложение для общения в реальном времени
Возможности • Технологии • Установка • Использование • Вклад в проект
BitChat - это современное веб-приложение для обмена сообщениями в реальном времени, построенное на Ruby on Rails 8. Приложение предоставляет удобный интерфейс для общения, систему достижений, уровней и полнофункциональный поиск пользователей.
- 💬 Чат в реальном времени - мгновенный обмен сообщениями через WebSockets
- 🔍 Умный поиск пользователей - поиск по имени, фамилии и логину с задержкой в 1 секунду
- 👤 Профили пользователей - персонализированные страницы с аватарами
- 🏆 Система достижений - награды за активность в приложении
- 📈 Уровни и опыт - геймификация процесса общения
- 📱 Адаптивный дизайн - оптимизация для мобильных устройств и десктопов
- 🌐 Мультиязычность - поддержка русского и английского языков
- 🔐 Аутентификация через Devise
- 🛡️ Защита от DDoS с помощью Rack::Attack
- 🔒 CSRF защита
- ✅ Валидация email через valid_email2
- Ruby 3.4.5
- Rails 8.1.0
- PostgreSQL - основная база данных
- Redis - для ActionCable и кеширования
- Hotwire (Turbo + Stimulus) - интерактивность без написания много JavaScript
- Tailwind CSS - современная утилитарная CSS библиотека
- Daisy UI - это плагин для Tailwind CSS, который добавляет готовые компоненты UI (кнопки, карточки, формы, алерты и т.д.) и систему тем.
- ViewComponent - компонентный подход к представлениям
- RSpec - тестирование
- FactoryBot - фабрики для тестов
- Faker - генерация тестовых данных
- RuboCop - линтер кода (rubocop-rails-omakase)
- Kamal - деплой в production
- Docker - контейнеризация
- Ruby 3.4.5 или выше
- Rails 8.0.1 или выше
- PostgreSQL 14 или выше
- Redis 6 или выше
- Node.js 18 или выше (для Tailwind CSS)
- Yarn или npm
git clone https://github.com/jonny-faringheit/chat_app.git
cd chat_app# Установка Ruby gems
bundle install
# Установка JavaScript пакетов
yarn install# Создание базы данных
bin/rails db:create
# Выполнение миграций
bin/rails db:migrate
# Заполнение тестовыми данными (опционально)
bin/rails db:seedСоздайте файл .env в корне проекта:
# Создайте .env файл для настройки БД, Redis, Sidekiq
cp ./.env.example ./.env# Запуск с Tailwind CSS watcher(рекомендуется)
bin/dev
# Или только Rails сервер
bin/rails server
bin/rails tailwindcss:watch
# Запустите Sidekiq для фоновых задач
bundle exec sidekiq --config config/sidekiq.ymlПриложение будет доступно по адресу: http://localhost:3000
- Перейдите на страницу регистрации
/users/signup - Заполните форму регистрации
- Подтвердите email (в development режиме письма можно увидеть в логах)
- Используйте поле поиска в шапке сайта
- Начните вводить имя, фамилию или логин
- Результаты появятся автоматически через 1 секунду
- Найдите пользователя через поиск
- Перейдите в его профиль
- Начните диалог
- Получайте достижения за различные действия
- Просматривайте свой прогресс в разделе "Достижения"
- Повышайте уровень за активность
# Запуск всех тестов
bundle exec rspec
# Запуск конкретного файла
bundle exec rspec spec/models/user_spec.rb
# Запуск с покрытием кода
COVERAGE=true bundle exec rspec# Проверка кода
bundle exec rubocop
# Автоисправление
bundle exec rubocop -a# Откат миграции
bin/rails db:rollback
# Пересоздание базы данных
bin/rails db:drop db:create db:migrate# Rails консоль
bin/rails console
# Песочница (изменения не сохраняются)
bin/rails console --sandboxПроект настроен для деплоя с помощью Kamal:
# Первый деплой
kamal setup
# Последующие деплои
kamal deploy- Fork репозитория
- Создайте feature branch (
git checkout -b feature/amazing-feature) - Commit изменения (
git commit -m 'Add some amazing feature') - Push в branch (
git push origin feature/amazing-feature) - Откройте Pull Request
- Следуйте Ruby Style Guide
- Пишите тесты для новой функциональности
- Обновляйте документацию при необходимости
- Убедитесь, что все тесты проходят
Этот проект лицензирован под MIT License - смотрите файл LICENSE для деталей.
- Jonny Faringheit - Основная работа - YourGitHub
- Ruby on Rails сообществу
- Всем контрибьюторам проекта
- Открытым библиотекам, использованным в проекте
Сделано с ❤️ используя Ruby on Rails