Ruby on rails 工头仅显示带有“的线条;从pid&x201D开始;没有别的了

Ruby on rails 工头仅显示带有“的线条;从pid&x201D开始;没有别的了,ruby-on-rails,ruby,heroku,rubygems,foreman,Ruby On Rails,Ruby,Heroku,Rubygems,Foreman,当我运行foreman时,我得到以下信息: > foreman start 16:47:56 web.1 | started with pid 27122 PYTHONUNBUFFERED=True 只有在我停止时(通过ctrl-c),它才会显示缺少的内容: ^CSIGINT received 16:49:26 system | sending SIGTERM to all processes 16:49:26 web.1 | => Booting Th

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

 > foreman start
 16:47:56 web.1     | started with pid 27122
PYTHONUNBUFFERED=True
只有在我停止时(通过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 ...
如何修复它?

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

通过使用foreman-0.27.0将此行添加到我的GEM文件中,解决了此问题

gem 'foreman', '0.27.0'

我也有同样的问题,但有不同的解决方案。(ruby 1.9.2p290、rails 3.1.0、ubuntu 10.04.3)

我将proc文件中的行更改为:

web: bundle exec thin start -p $PORT
致:

它不再给我带来问题。

“Foreman将向终端输出显示它启动的进程写入stdout的任何内容。”-请参阅

顺便说一句,您可以在Procfile中使用tailf来查看日志

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

提示:在OSX中不存在tailf,使用tail-f-n40 log/development.log工作。

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

  • 发件人:

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

  • 通过以下方式安装工头:


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

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


    然后,加载开发环境的所有内容(包括thin)都不会缓冲stdout。

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

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

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

    不。没用。在webrick上向我显示了一些信息消息,但它仍然只在ctrl-c之后显示引导消息…这一条对我有效。我用
    bundle exec puma…
    rails s…
    启动了服务器,当我安装了heroku工具带包中的“更一般的工头”。gems中的一个没有…这也有同样的目的,但没有改变rails仍然没有为我刷新缓冲区的原因。当我运行“rails控制台”并运行STDOUT.sync时,它返回true,因此应该刷新,但foreman仍然没有从worker写入任何内容。rails只在下一个rack请求完成时刷新写入日志文件,由rails::rack::Logger中间件处理。你在和哪个工人说话?Resque redis?对不起,我说的工人是指正在运行的尾部f。不知道为什么,但我肯定有一个开发环境,web正在编写我当前通过日志看到的所有消息。+1-非常感谢!根据下面的@Earle Clubb,我将
    $stdout.sync=true
    行添加到我的
    config/environments/development.rb
    文件中,它工作得非常好!现在只有1起作用了。当Heroku Toolbelt使用旧版本的foreman时,可能会使用第二个。如果要启动需要整个rails堆栈的多个任务,可能需要一段时间才能启动所有任务。工头的输出是即时的,但是你的背景工作不会比平常快。就我而言,我不得不等大约2分钟。所以等等,问题是关于Ruby和RubyonRails,而不是Python