Участвуя в этом проекте, вы соглашаетесь следовать [кодексом поведения].
Существует множество способов внести свой вклад в проект Puma. Некоторые примеры включают:
Новички приветствуются! Мы будем рады помочь вам сделать ваш первый вклад в проект с открытым исходным кодом.
Любые вопросы о внесении вклада могут быть заданы в наших Discussions.
Если вы нервничаете, застряли, нуждаетесь в помощи или хотите узнать, с чего начать и где вы можете помочь, не стесняйтесь забронировать 30 минут с поддерживателем @nateberkopec здесь. Он с радостью поможет!Nate также выступил с докладом на конференции в 2022 году, подробно описав, как работает Puma, краткий обзор его внутренней структуры и краткое руководство по внесению вклада.
Клонируйте репозиторий Puma:
git clone git@github.com:puma/puma.git && cd puma
Вы должны установить [Ragel](https://www Ragel.org/) (используйте версию Ragel 7.0.0.9) для генерации расширений кода Puma.
macOS:
brew install ragel
Linux:
apt-get install ragel
Windows (Ruby 2.5 и выше):
ridk exec pacman -S mingw-w64-x86_64-openssl mingw-w64-x86_64-ragel
Установите Ruby зависимости:
bundle install
Чтобы запустить Puma локально, вы должны скомпилировать native расширение. Выполнение задачи test
с помощью rake делает это автоматически, но вам может потребоваться вручную запустить команду компиляции, если вы хотите запустить Puma и еще не выполнили тесты:
Ubuntu, macOS и т.д.:
bundle exec rake compile
Windows:
bundle exec rake -rdevkit compile
Теперь вы должны иметь возможность запустить Puma локально:
bundle exec bin/puma test/rackup/hello.ru
# или
bundle exec ruby -Ilib bin/puma test/rackup/hello.ru
В качестве альтернативы вы можете ссылаться на локальную копию в файле Gemfile
проекта:
gem "puma", path: "/путь/к/локальной/пуме"
Дополнительные сведения см. в документации Bundler.[ragel]: https://www.colm.net/open-source/ragel/
Чтобы запустить rubocop + тесты:
bundle exec rake
Чтобы запустить только тестовый набор:
bundle exec rake test
Чтобы запустить отдельный файл тестов:
bundle exec ruby test/test_binder.rb
Вы также можете запускать тесты с помощью m
:
bundle exec m test/test_binder.rb
Чтобы запустить отдельный тест:
bundle exec m test/test_binder.rb:37
Чтобы запустить отдельный тест с временем ожидания тест-кейса в 5 секунд:
TEST_CASE_TIMEOUT=5 bundle exec m test/test_binder.rb:37
Если вам требуется дополнительная информация о сборке расширений, версиях SSL, вашей локальной версии Ruby и т.д., используйте переменную окружения PUMA_TEST_DEBUG:
PUMA_TEST_DEBUG=1 bundle exec rake test
Puma также имеет вспомогательный файл для запуска тестов, см. комментарии в начале файла test/runner
. Пример:
test/runner -v test_puma_server.rb
Тестовый набор Puma открывает большое количество сокетов. Это может превысить стандартное ограничение вашей операционной системы. Если ваши ограничения файлов низкие, вы можете столкнуться с ошибками "слишком много открытых файлов" при запуске тестового набора Puma.
# проверьте ваше ограничение файлов
ulimit -S -n
# измените ограничение файлов для текущей сессии
ulimit -S -n <значение>
Мы обнаружили, что значения 4000 и выше работают хорошо. Узнайте больше о ваших ограничениях файлов и том, как их изменить, здесь.## Как внести свой вклад
Puma нуждается в вашей помощи в нескольких областях!Не волнуйтесь о "заявке на задачу". В Puma задачи не "заявляются". Просто начните работать над ней. Трекер задач почти всегда обновляется, так что если есть открытая задача, она готова для вашего вклада (если у вас есть вопросы о том, как закрыть задачу — пожалуйста, задайте их!). Как только у вас будет несколько строк кода, опубликуйте черновик PR. Мы с удовольствием поможем вам, как только вы опубликуете черновик PR.
Новички в системном программировании? Это нормально! Puma работает с концепциями, с которыми вы могли не сталкиваться ранее, такими как сокеты, TCP, UDP, SSL и потоки. Это нормально! Вы можете учиться, внося вклад. Также обратите внимание на раздел "Библиография" в конце этого документа.
Тег contrib-wanted указывает на то, что задача может быть доступна для новых участников.
Повторение отчетов об ошибках: Тег needs-repro указывает на то, что задача не имеет шагов воспроизведения. Вы можете помочь, повторив ошибку и поделившись шагами, которые вы выполнили, в комментариях.
Помощь с нашими нативными расширениями: Если вы заинтересованы в написании кода на C или Java, мы действительно нуждаемся в вашей помощи. Проверьте теги задач для c-ext и JRuby.Исправление ошибок: Задачи с тегом bug имеют рабочие шаги воспроизведения, которые вы можете использовать для написания теста и отправки исправления.Разработка новых функций: Тег feature выделяет запросы на новые функции. Напишите тесты и реализуйте нашу новую функцию!
Обзор кода: Посмотрите открытые pull requests и предложите свои комментарии. Обзор кода не только для поддержки. Мы нуждаемся в вашей помощи и глазах!
Написание документации: Puma нуждается в дополнительной документации во многих областях, особенно там, где у нас есть открытые задачи с тегом docs.
Воспроизведение ошибки помогает выявить её корневую причину, чтобы затем устранить её.
Чтобы начать, создайте файл rackup и файл конфигурации, а затем запустите ваш тестовый приложение с помощью команды:
bundle exec puma -C <путь/к/файлу/конфигурации.rb> <путь/к/файлу/rackup.ru>
Например, используя тестовый rack-приложение ([test/rackup/hello.ru
][rackup]) и тестовый файл конфигурации ([test/config/settings.rb
][config]):
bundle exec puma -C test/config/settings.rb test/rackup/hello.ru
Также доступен Dockerfile для воспроизведения проблем, специфичных для Linux:
docker build -f tools/Dockerfile -t puma .
docker run -p 9292:9292 -it puma
```[rackup]: https://github.com/puma/puma/blob/master/test/rackup/hello.ru
[config]: https://github.com/puma/puma/blob/master/test/config/settings.rb
## Внесение изменений
Пожалуйста, создайте черновик PR сразу, как только вы будете готовы к получению обратной связи от сообщества.
Вклады в код должны включать тестовое покрытие. Если вы не уверены, как протестировать ваши изменения, пожалуйста, создайте pull request и оставьте комментарий с просьбой о помощи.
Обновление журнала изменений ([`History.md`](History.md)) не требуется; это делается [при выпуске новой версии](Release.md).
Puma использует [GitHub Actions](https://docs.github.com/en/actions) для CI-тестирования. Пожалуйста, рассмотрите возможность запуска рабочих процессов в вашем форке перед созданием pull request. Включить GitHub Actions в вашем форке можно в разделе `Actions` репозитория.
## Возвраты
Puma не имеет политики по поводу возвратов исправлений. Поддержчики не будут последовательно возвращать исправления ошибок в предыдущие мажорные или минорные версии (исключения составляют вопросы безопасности, см. [`SECURITY.md`](SECURITY.md)).
Как вкладчик, вы можете создавать pull requests против веток `-stable` для возврата исправлений, и поддержчики выпустят их после слияния. Например, если вы хотите сделать возврат для 4.3.x, вы можете создать pull request против ветки `4-3-stable`. Если нет подходящей ветки для выпуска, для которого вы хотите сделать возврат, пожалуйста, откройте issue, и мы создадим ветку для вас.## Вступление в сообщество
Если вы хотите внести свой вклад в Puma, пожалуйста, присоединяйтесь к нам в [Discussions](https://github.com/puma/puma/discussions).
## Библиография/Чтение
Puma может быть немного пугающим для вашего первого вклада, так как здесь много концепций, с которыми вы, возможно, никогда не сталкивались раньше — Rack, сокеты, форки, потоки и т.д. Вот несколько полезных ссылок для изучения вопросов, связанных с Puma:
* [Архитектурные документы Puma](https://github.com/puma/puma/blob/master/docs/architecture.md)
* [Спецификация Rack](https://github.com/rack/rack/blob/master/SPEC.rdoc)
* [Работа с...](https://workingwithruby.com/) "Working With" — это отличная (и теперь бесплатная) серия книг о Ruby, посвященная работе с потоками, TCP и Unix сокетами.
* Документация Ruby для IO.pipe, TCPServer/Socket.
* [Документация nio4r](https://github.com/socketry/nio4r/wiki/Getting-Started)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )