Форман показывает только строку «началось с pid #» и ничего больше - PullRequest
53 голосов
/ 03 января 2012

Когда я запускаю мастера, я получаю следующее:

 > foreman start
 16:47:56 web.1     | started with pid 27122

Только если я остановлю его (через ctrl-c), он покажет мне, чего не хватает:

^CSIGINT received
16:49:26 system    | sending SIGTERM to all processes
16:49:26 web.1     | => Booting Thin
16:49:26 web.1     | => Rails 3.0.0 application starting in development on http://0.0.0.0:5000
16:49:26 web.1     | => Call with -d to detach
16:49:26 web.1     | => Ctrl-C to shutdown server
16:49:26 web.1     | >> Thin web server (v1.3.1 codename Triple Espresso)
16:49:26 web.1     | >> Maximum connections set to 1024
16:49:26 web.1     | >> Listening on 0.0.0.0:5000, CTRL+C to stop
16:49:26 web.1     | >> Stopping ...
16:49:26 web.1     | Exiting
16:49:26 web.1     | >> Stopping ...

Как мне это исправить?

Ответы [ 6 ]

49 голосов
/ 16 января 2012

Мне удалось решить эту проблему двумя способами:

  1. С https://github.com/ddollar/foreman/wiki/Missing-Output:

    Если вы не видите никаких выходных данных изваша программа, есть вероятность, что она буферизует стандартный вывод.Ruby буферизирует стандартный вывод по умолчанию.Чтобы отключить это поведение, добавьте этот код как можно раньше в свою программу:

    # ruby
    $stdout.sync = true
    
  2. Устанавливая мастера с помощью пакета инструментов heroku

Но я до сих пор не знаю, что происходит, и почему это двумя способами выше решило проблему ...

21 голосов
/ 21 июня 2012

Мое решение заключалось в том, чтобы поместить $stdout.sync = true в начало файла config / environment / development.rb.

Тогда все, что загружает среду разработки (включая тонкий), не будет буферизовать стандартный вывод.

15 голосов
/ 09 января 2012

"Форман будет выводить на терминал все, что записано на стандартный вывод процессами, которые он запускает." - ddollar См. foreman-Issues # 57

Кстати, вы можете использовать tailf в Procfile для просмотра журналов

web: bundle exec rails server thin -p $PORT
log: tail -f log/development.log

Совет: tailf не существует в OSX, работает tail -f -n 40 log / development.log.

5 голосов
/ 25 января 2014

Если вы используете Foreman для запуска проекта Python, а не проекта Ryby, и у вас возникла та же проблема, вот несколько решений для вас. Если вы используете Procfile для прямого вызова Python CLI, то вы можете использовать опцию '-u', чтобы избежать буферизации stdout:

python -u script.py

Если вы используете Procfile для управления сервером WSGI, например, для вызова gunicorn, flask, bottle, eve и т. Д., То вы можете добавить файл «.env» в корень вашего проекта Python, содержащий следующее :

PYTHONUNBUFFERED=True
4 голосов
/ 07 января 2012

У меня тоже была такая же проблема, но с другим решением.(ruby 1.9.2p290, rails 3.1.0, ubuntu 10.04.3)

Я изменил строку в моем Procfile с:

web: bundle exec thin start -p $PORT

на:

web: bundle exec rails server thin -p $PORT

и это больше не вызывало у меня проблемы.

4 голосов
/ 06 января 2012

У меня такая же проблема (ruby 1.9.3-p0, rails 3.2rc2, OSX 10.7).

Решил проблему, используя foreman-0.27.0, добавив эту строку в мой Gemfile.

gem 'foreman', '0.27.0'
...