54

当我运行工头时,我得到以下信息:

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

我如何解决它?

4

6 回答 6

51

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

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

    如果您没有看到程序的任何输出,则很可能它正在缓冲标准输出。Ruby 默认缓冲标准输出。要禁用此行为,请尽早在程序中添加此代码:

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

但是我仍然不知道发生了什么,也不知道为什么上述两种方法解决了问题......</p>

于 2012-01-15T22:10:49.847 回答
21

我的解决方案是放在$stdout.sync = trueconfig/environments/development.rb 的顶部。

那么加载开发环境的所有东西(包括瘦)都不会缓冲标准输出。

于 2012-06-21T16:36:16.783 回答
16

“工头将向终端输出显示它启动的进程写入标准输出的任何内容。” - 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 有效。

于 2012-01-08T23:20:27.377 回答
5

我也有同样的问题,但有不同的解决方案。(红宝石 1.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

它不再给我一个问题。

于 2012-01-06T23:37:54.243 回答
4

我有同样的问题(ruby 1.9.3-p0,rails 3.2rc2,OSX 10.7)。

通过将此行添加到我的 Gemfile 中,使用 foreman-0.27.0 解决了该问题。

gem 'foreman', '0.27.0'
于 2012-01-06T05:25:04.780 回答
4

如果您使用 Foreman 来运行 Python 项目,而不是 Ryby 项目,并且遇到同样的问题,这里有一些解决方案。如果您使用 Procfile 直接调用 python CLI,那么您可以使用“-u”选项来避免标准输出缓冲:

python -u script.py

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

PYTHONUNBUFFERED=True
于 2014-01-25T16:58:59.560 回答