ijv*_*rig 53 ruby rubygems ruby-on-rails heroku foreman
当我管理工头时,我得到以下内容:
> foreman start
16:47:56 web.1 | started with pid 27122
Run Code Online (Sandbox Code Playgroud)
只有当我停止它(通过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 ...
Run Code Online (Sandbox Code Playgroud)
我如何解决它?
ijv*_*rig 49
我已经能够通过两种不同的方式解决这个问题:
来自https://github.com/ddollar/foreman/wiki/Missing-Output:
如果您没有看到程序的任何输出,则很可能它正在缓冲标准输出.Ruby默认情况下缓冲stdout.要禁用此行为,请尽早在程序中添加此代码:
# ruby
$stdout.sync = true
Run Code Online (Sandbox Code Playgroud)通过heroku toolbelt包安装工头
但我仍然不知道发生了什么,也不知道为什么上述两种方式解决了这个问题......
小智 21
我的解决方案是放在$stdout.sync = true
config/environments/development.rb的顶部.
然后加载开发环境(包括thin)的所有内容都不会缓冲stdout.
jul*_*onc 15
"Foreman将向终端输出显示由其启动的进程写入stdout的任何内容." - ddollar见工头问题#57
顺便说一句,你可以使用tailf进入Procfile来查看日志
web: bundle exec rails server thin -p $PORT
log: tail -f log/development.log
Run Code Online (Sandbox Code Playgroud)
提示:在OSX中不存在tailf,使用tail -f -n 40 log/development.log工作.
小智 5
我也有同样的问题,但有不同的解决方案。(红宝石 1.9.2p290,导轨 3.1.0,ubuntu 10.04.3)
我将 Procfile 中的行从:
web: bundle exec thin start -p $PORT
Run Code Online (Sandbox Code Playgroud)
到:
web: bundle exec rails server thin -p $PORT
Run Code Online (Sandbox Code Playgroud)
它不再给我带来问题。
如果您使用Foreman运行Python项目而不是Ryby项目,并且您遇到了同样的问题,那么这里有一些解决方案.如果您使用Procfile直接调用python CLI,那么您可以使用'-u'选项来避免stdout缓冲:
python -u script.py
Run Code Online (Sandbox Code Playgroud)
如果您使用Procfile来管理WSGI服务器,例如调用gunicorn,flask,bottle,eve等,那么您可以将".env"文件添加到python项目的根目录,其中包含以下内容:
PYTHONUNBUFFERED=True
Run Code Online (Sandbox Code Playgroud)