Понимание рельсового конфликта с Пумой и Капибарой. Как правильно установить puma в Gemfile? - PullRequest
0 голосов
/ 04 ноября 2019

Я наследую кодовую базу, где тесты были отменены чуть более года. Я пытаюсь максимально очистить набор тестов, но мне трудно дразнить свои интеграционные тесты с помощью 1. Capybara 2. Puma, 3. Selenium, 4. Запуск сервера Rails с помощью rails s.

Вот моя первоначальная настройка и проблема с приложением Rails 4.2. Поэтому, ничего не делая с самого начала, когда я выполняю тестирование рельсов, я получаю следующую ошибку:

Capybara не может загрузить puma для своего сервера, пожалуйста, добавьте puma в свой проектили укажите другой сервер через что-то вроде Capybara.server = :webrick. (LoadError).

Я хочу указать, что в отдельном файле с именем start-dev в его содержимом содержится следующее:

rails s -b 0.0.0.0

Когда я выполняю эту командус помощью ./start-dev я могу просматривать мое приложение для разработки с этим URL-адресом, определенным в моем /etc/hosts 127.0.0.1 secure.ssl.local

Теперь вот где я начинаю сталкиваться с проблемами, читая некоторые форумы github относительноcapybara и puma, я начинаю с добавления puma в мой Gemfile и установку комплекта, но теперь я не могу увидеть свое приложение для разработки через браузер на secure.ssl.local.

Это ошибка, которую я получаю:

/ usr / lib / ruby ​​/ 2.6.0 / uri / rfc3986_parser.rb: 67: в `split ': плохой URI (не URI?):" Tcp: //0.0.0.0 \ r: 3000"(URI :: InvalidURIError)

Я заметил, что при запуске, когда я выполняю ./start-dev, который, если вы помните, имеет rails s -b 0.0.0.0, я вижу это:

Booting Puma rails 4.2.11.1 application starting in development on https://0.0.0.0:3000

Так что меня смущает эта ошибка. Puma блокирует мой порт 3000, означающий, что я должен изменить порт Puma? И что делает это еще более запутанным, так это то, что вместо запуска ./start-dev в терминале, и я просто запускаю rails s -b 0.0.0.0, он волшебным образом работает, за исключением того, что он работает, только если я перехожу на localhost:3000, а не secure.ssl.localhost. Это важно, потому что на secure.ssl.localhost у меня есть и мне нужен сертификат, а у localhost нет.

И, наконец, добавьте еще один слой путаницы, когда я запускаю тесты с установленным гемом puma изапустить rake test Я получаю это с Puma:

Capybara запускает Puma ... * Версия 4.2.1, кодовое имя: Distant Airhorns * Мин. потоков: 0, Макс. потоков: 4 * Прослушивание по tcp://127.0.0.1:36608

И тесту требуется много времени для загрузки. Происходит многое, но я думаю, что мой вопрос можно сформулировать следующим образом? Когда я устанавливаю puma в свое приложение rails, нужно ли указывать его для определенного порта, чтобы он не конфликтовал с моим приложением? Без puma мои тесты не могут быть запущены, и мой ./start-dev файл работает. С puma мои тесты вроде работают, но мой файл ./start-dev больше не работает. Наверняка должен быть стандарт для настройки пумы. Спасибо.

1 Ответ

0 голосов
/ 05 ноября 2019

Установите Puma только для тестовой среды, поместив ее в тестовую группу:

group :test do
  gem "puma"
end

Или сделайте так, как предлагает Capybara, и вставьте Capybara.server = :webrick в spec/rails_helper.rb

FYI: Rails используетPuma в качестве веб-сервера по умолчанию, если установлена ​​Puma

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...