工头只显示“启动机智pid#”而没有别的

当我跑领class时,我得到以下几点:

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

只有当我停止它(通过CTRL-C)它显示我什么是缺less的:

 ^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 ... 

我如何解决它?

我已经能够通过两种不同的方式解决这个问题:

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

    如果你没有看到你的程序的输出,有可能是缓冲标准输出。 Ruby默认缓冲stdout。 要禁用此行为,请尽早在程序中添加以下代码:

     # ruby $stdout.sync = true 
  2. 通过使用heroku工具包安装工头

但我仍然不知道发生了什么,也不知道为什么这两种方式解决了这个问题…

我的解决scheme是把$stdout.sync = true放在config / environments / development.rb的顶部。

那么加载开发环境的所有东西(包括精简)都不会缓冲stdout。

“工头将向terminal输出显示由它启动的进程写入标准输出的任何内容。” – ddollar见领class问题#57

顺便说一句,你可以使用tailf到Procfile来查看日志

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

提示:tailx在OSX中不存在,使用tail -f -n 40 log / development.log工程。

我有同样的问题(ruby1.9.3-P0,导轨3.2rc2,OSX 10.7)。

通过使用foreman-0.27.0解决了这个问题,把这一行添加到我的Gemfile中。

 gem 'foreman', '0.27.0' 

我也有同样的问题,但有不同的解决scheme。 (ruby1.9.2p290,导轨3.1.0,Ubuntu 10.04.3)

我改变了我的Procfile中的行:

 web: bundle exec thin start -p $PORT 

至:

 web: bundle exec rails server thin -p $PORT 

它不再给我一个问题。

如果您使用Foreman来运行Python项目,而不是Ryby项目,并且遇到同样的问题,则可以使用以下解决scheme。 如果您正在使用Procfile直接调用Python CLI,则可以使用“-u”选项来避免stdout缓冲:

 python -u script.py 

如果您使用Procfile来pipe理WSGI服务器,例如调用gunicorn,flask,bottle,eve等,那么您可以在您的python项目的根目录中添加一个“.env”文件,其中包含以下内容:

 PYTHONUNBUFFERED=True