Подтвердить что ты не робот

Rails зависает при поиске через выходной буфер tmux

Я запускаю Rails 3.2.6 в режиме разработки с помощью tmux. Когда я просматриваю выходной буфер сервера Rails (запускается с использованием rails s) с помощью tmux, сервер зависает и не обрабатывает никаких запросов. Когда я уйду из режима прокрутки, сервер снова начнет работать правильно.

Как настроить мой сервер для обработки запросов, когда я просматриваю выходной буфер?

4b9b3361

Ответ 1

Если вы хотите приостановить и изучить в определенной последовательности сообщений журнала, пока ваш сервер продолжает обрабатывать запросы, вероятно, лучше всего непосредственно просмотреть файлы журнала; вы можете использовать less -R log/development.log.

В то время как панель tmux находится в режиме копирования (режим, используемый для просмотра истории панелей), tmux не считывает никакого вывода из процессов, запущенных в панелях tty. Если процессы продолжают записывать выходные данные в tty, тогда буфер ts OS будет в конечном итоге заполняться. Когда программа записывает в tty с полным буфером, это заставляет процесс блокировать, чтобы буфер не переполнялся; это то, что заставляет ваш сервер временно останавливать запросы на обработку.

Временная шкала выглядит так:

  • Вы вводите режим копирования, чтобы просмотреть какой-то старый вывод.
    tmux перестает читать из tty.
  • Сервер Rails продолжает записывать в tty, поскольку он обрабатывает текущие запросы.
    ОС поглощает эти записи в буфере tty с ограниченным размером.
  • В конце концов буфер OS tty заполняется и вызывает дальнейшую запись в tty для блокировки.
    Здесь сервер Rails "зависает"; он застрял, ожидая, когда ОС вернется из (например) вызова записи (2), который он сделал, для отображения сообщения журнала.
  • Вы выходите из режима копирования.
    tmux возобновляет чтение с tty, истощает буферный выход и принимает новый выход.