Hexlet SICP
Читать на другом языке: English
Hexlet SICP — сервис, в котором есть рейтинг тех, кто проходит СИКП, и каждый отмечает, что он прошёл.
Как изучать Структуру и Интерпретацию Компьютерных Программ (SICP)
Участие
- Обсуждение в канале #hexlet-volunteers слака http://slack-ru.hexlet.io
Видео созвонов
FAQ
Q: Ошибка Illuminate\Session\TokenMismatchException: CSRF token mismatch.
A: Сбросить кеш конфига php artisan config:clear
Requirements
Проверить зависимости PHP можно командой composer check-platform-reqs
- PHP ^8.0
- Composer
- Node.js (v14+) & NPM (6+)
- SQLite for local, PostgreSQL for production
- heroku cli, Как развернуть приложение на Heroku
Setup
Подготовка и запуск локально
Запуск с локальным интерпретатором и sqlite базой.
make setup # Настройка проекта
make start # start server http://127.0.0.1:8000/
make test # run tests
Запуск с БД 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
Setup in 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 # build project make compose-start # start server http://127.0.0.1:8000/
make compose-bash # start bash session inside docker container make test # run tests inside docker container
Стандарты кодирования и прочие правила
- Пулреквесты должны быть настолько маленькими, насколько это возможно с точки зрения здравого смысла
- Весь код должен соответствовать стандартам кодирования PSR12 и Laravel (используем немного кастома, чтобы усложнить жизнь разработчика)
- Пулреквест должен проходить все проверки CI
- Все экшены контроллеров должны быть покрыты тестами (Начинаем писать тесты (правильно))
- Формы делаются с помощью laraeast/laravel-bootstrap-forms
- В подавляющем большинстве используется ресурсный роутинг. Что под него не подходит, сначала обсуждается (такое бывает крайне редко)
- Тексты только через локали
- Чтобы включить логирование Rollbar, необходимо установить переменную
LOG_CHANNEL=rollbar
иROLLBAR_TOKEN=
(docs) - Чтобы добавить упражнение, необходимо добавить его содержимое (код или картинка) по пути
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
This repository is created and maintained by the team and the community of Hexlet, an educational project. Read more about Hexlet (in Russian).