When I run foreman I get the following:
> foreman start 16:47:56 web.1 | started with pid 27122
Only if I stop it (via ctrl-c) it shows me what is missing:
^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 ...
How do I fix it?
I’ve been able to resolve this issue by 2 different ways:
If you are not seeing any output from your program, there is a likely
chance that it is buffering stdout. Ruby buffers stdout by default. To
disable this behavior, add this code as early as possible in your
# ruby $stdout.sync = true
By installing foreman via the heroku toolbelt package
But I still don’t know what’s happening nor why this 2 ways above resolved the issue…
My solution was to put
$stdout.sync = true at the top of config/environments/development.rb.
Then everything that loads the development environment (incluing thin) will not buffer stdout.
“Foreman will display to the terminal output anything written to stdout by the processes it launches.” – ddollar See foreman-issues#57
BTW, you can use tailf into Procfile to see logs
web: bundle exec rails server thin -p $PORT log: tail -f log/development.log
Tip: tailf doesn’t exist in OSX, using tail -f -n 40 log/development.log works.
I have the same problem (ruby 1.9.3-p0, rails 3.2rc2, OSX 10.7).
Resolved the issue by using foreman-0.27.0 by adding this line into my Gemfile.
gem 'foreman', '0.27.0'
I also had the same problem but with a different solution. (ruby 1.9.2p290, rails 3.1.0, ubuntu 10.04.3)
I changed the line in my Procfile from:
web: bundle exec thin start -p $PORT
web: bundle exec rails server thin -p $PORT
and it no longer gave me an issue.
If you are using Foreman to run a Python project, rather than a Ryby project, and you’re having the same issue, here are some solutions for you. If you are using a Procfile to invoke the python CLI directly, then you can use the ‘-u’ option to avoid stdout buffering:
python -u script.py
If you are using a Procfile to manage a WSGI server, such as invoking gunicorn, flask, bottle, eve, etc., then you can add a “.env” file to the root of your python project, containing the following: