Hexlet SICP
Читать на другом языке: English
Hexlet SICP — это сервис для тех, кто изучает книгу "Структура и интерпретация компьютерных программ". Отслеживайте свой прогресс и сравнивайте себя с другими в глобальной таблице лидеров.
Предварительно рекомендуем прочесть статью Как изучать Структуру и Интерпретацию Компьютерных Программ (SICP)
Участие в разработке
- Обсуждение идёт в Slack Hexlet в канале #hexlet-volunteers
- Плейлист записей созвонов участников
Известные ошибки
Q: Ошибка Illuminate\Session\TokenMismatchException: CSRF token mismatch.
A: Сбросить кеш конфига php artisan config:clear
Предварительные требования
Проверить зависимости PHP можно командой composer check-platform-reqs
- PHP ^8.0
- Composer
- Node.js (v14+) & NPM (6+)
- SQLite for local, PostgreSQL for production
- Heroku cli (Как развернуть приложение Laravel на Heroku)
Установка
Локальная установка
Для запуска на локальном интерпретаторе и SQLite:
make setup # первоначальная установка
make start # запуск сервера http://127.0.0.1:8000/
make test # запуск тестов
Запуск с БД PostgreSQL (разворачивается в Docker-контейнере)
-
Установить зависимости и подготовить конфигурационный файл
make setup
-
Указать параметры подключения к БД в файле .env
DB_CONNECTION=pgsql DB_HOST=localhost DB_PORT=54320 DB_DATABASE=postgres DB_USERNAME=postgres DB_PASSWORD=secret
-
Запустить контейнер с БД и сгенерировать записи
make compose-start-database make db-prepare
-
Запустить локальный веб-сервер
make start
Установка в Docker
-
Подготовить файл .env
make env-prepare
-
Указать параметры подключения к БД в файле .env
DB_CONNECTION=pgsql DB_HOST=database DB_PORT=5432 DB_DATABASE=postgres DB_USERNAME=postgres DB_PASSWORD=secret
-
Собрать и запустить приложение
make compose-setup # собрать проект make compose-start # запустить сервер http://127.0.0.1:8000/ make compose-bash # запустить сессию bash в docker-контейнере make test # запустить тесты в docker-контейнере
Стандарты кодирования и прочие правила
- Пулреквесты должны быть настолько маленькими, насколько это возможно с точки зрения здравого смысла
- Весь код должен соответствовать стандартам кодирования PSR12 и Laravel (мы так же используем некоторые собственные правила, чтобы усложнить жизнь разработчика)
- Пулреквест должен проходить все проверки CI
- Все экшены контроллеров должны быть покрыты тестами (Начинаем писать тесты (правильно))
- Формы делаются с помощью laraeast/laravel-bootstrap-forms
- В подавляющем большинстве используется ресурсный роутинг. Что под него не подходит, сначала обсуждается (такое бывает крайне редко)
- Тексты только через локали
- Чтобы включить логирование Rollbar, необходимо установить переменную
LOG_CHANNEL=rollbar
иROLLBAR_TOKEN=
(документация) - Чтобы добавить упражнение, необходимо добавить его содержимое (код или картинка) по пути
resources/views/exercise/listing/#_#.blade.php
, а текстовое описание вresources/lang/{locale}/sicp.php
под ключемexercises.#.#
на соответствующем языке. - Для генерации хелперов (для автодополнения) используйте
make ide-helper
- Изучите список доступных команд
php artisan
!
Руководство по настройке авторизации через GitHub
Зарегистрируйте приложение на GitHub (подробнее https://developer.github.com/apps/about-apps/).
Для этого:
- В меню учетной записи GitHub выберите пункт “Settings”
- В открывшемся окне в панели навигации, справа, выберите “GitHub Apps”, затем нажмите кнопку “New GitHub App”
- В открывшейся форме в поле "GitHub App name" введите название приложения (например, Hexlet-SICP)
- В поле Homepage URL — адрес ресурса (например, https://hexlet-sicp.herokuapp.com)
- В поле "User authorization callback URL" введите полный URL-адрес для перенаправления после того, как пользователь авторизует приложение на GitHub. (например, https://hexlet-sicp.herokuapp.com/oauth/github/callback)
- В поле "Webhook URL" укажите URL-адрес, по которому будут отправляться события (например, https://hexlet-sicp.herokuapp.com/oauth/github/callback)
- Откройте права на получение информации о e-mail пользователя (User permissions->Email addresses->Read only)
- Сохраните данные регистрации приложения (кнопка "Create GitHub App")
- На открывшейся странице приложения скопируйте Client ID и Client secret
- Cгенерируйте закрытый ключ (кнопка Generate a private key)
В случае деплоя на Heroku, задайте переменные окружения для развернутого приложения.
Для этого:
- Перейдите на вкладку "Settings"
- В настройке "Config Vars" добавьте переменные
GITHUB_CLIENT_ID
,GITHUB_CLIENT_SECRET
иGITHUB_URL_REDIRECT
указав для них соответвенно значения Client ID, Client secret и User authorization callback URL - После чего выпольните сброс кеша конфигурации:
heroku run php artisan config:cache
Альтернативный профиль БД для тестирования
-
Создать отдельную тестовую базу postgres. Настройки параметров подключения можно посмотреть в секции
pgsql_test
конфигурацииconfig/database.php
Пример создания тестовой базы "с нуля":
sudo apt install postgresql sudo -u postgres createuser --createdb $(whoami) sudo -u postgres createuser hexlet_sicp_test_user sudo -u postgres psql -c "ALTER USER hexlet_sicp_test_user WITH ENCRYPTED PASSWORD 'secret'" createdb hexlet_sicp_test
-
Запустить тесты с альтернативным профилем
DB_CONNECTION=pgsql_test make test
Добавить пре-комит хук
git config core.hooksPath .githooks
Этот репозиторий создан и поддерживается командой и сообществом образовательного проекта Hexlet. Подробнее о Hexlet