1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-Puma_old1

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
CONTRIBUTING.md 15 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 18.04.2025 12:28 f6c362e

Участие в проекте Puma

Участвуя в этом проекте, вы соглашаетесь следовать [кодексом поведения].

Существует множество способов внести свой вклад в проект Puma. Некоторые примеры включают:

  • создание [отчета о баге] или [запроса на новую функцию]
  • проверка [существующих отчетов о багах] и добавление [шагов воспроизведения]
  • просмотр pull requests и локальное тестирование изменений на вашем компьютере
  • написание или редактирование [документации]
  • улучшение охвата тестов
  • устранение [воспроизводимого бага] или добавление новой функции

Новички приветствуются! Мы будем рады помочь вам сделать ваш первый вклад в проект с открытым исходным кодом.

Установка

Любые вопросы о внесении вклада могут быть заданы в наших Discussions.

Если вы нервничаете, застряли, нуждаетесь в помощи или хотите узнать, с чего начать и где вы можете помочь, не стесняйтесь забронировать 30 минут с поддерживателем @nateberkopec здесь. Он с радостью поможет!Nate также выступил с докладом на конференции в 2022 году, подробно описав, как работает Puma, краткий обзор его внутренней структуры и краткое руководство по внесению вклада.

Клонирование репозитория

Клонируйте репозиторий Puma:

git clone git@github.com:puma/puma.git && cd puma

Ragel

Вы должны установить [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 зависимостей

Установите Ruby зависимости:

bundle install

Скомпилировать native расширения

Чтобы запустить Puma локально, вы должны скомпилировать native расширение. Выполнение задачи test с помощью rake делает это автоматически, но вам может потребоваться вручную запустить команду компиляции, если вы хотите запустить Puma и еще не выполнили тесты:

Ubuntu, macOS и т.д.:

bundle exec rake compile

Windows:

bundle exec rake -rdevkit compile

Запустить локальный Puma

Теперь вы должны иметь возможность запустить 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-Puma_old1.git
git@api.gitlife.ru:oschina-mirror/mirrors-Puma_old1.git
oschina-mirror
mirrors-Puma_old1
mirrors-Puma_old1
master