2012-01-03 36 views
51

當我運行工頭,我得到以下幾點:工頭只顯示符合「開始機智PID#」,並沒有別的

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

我該如何解決?

+0

如果您推出的多任務堆棧,它可能需要一段時間才能啓動一切。工頭輸出是即時的,但您的後臺工作不會比平時更快。就我而言,我不得不等待大約2分鐘。所以...等待它。 – 2013-12-16 16:06:53

回答

47

我已經能夠通過兩種不同的方式來解決這個問題:

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

    如果您沒有看到從你的程序的任何輸出,是有可能 它有可能緩衝標準輸出。 Ruby默認緩衝stdout。爲了 禁用此行爲,在你的 計劃儘早添加以下代碼:

    # ruby 
    $stdout.sync = true 
    
  2. 通過經由heroku toolbelt package

安裝工長,但我仍然不知道發生了什麼也不解釋爲什麼這2種方式解決了這個問題...

+0

這是超好玩的! – Cyrus 2012-08-17 06:43:29

+5

+1 - 非常感謝!在下面的@Earle Clubb中,我在''config/environments/development.rb'文件中添加了'$ stdout.sync = true'行,它完美的工作! – 2013-01-03 15:26:06

+2

現在只有1的作品。 Heroku Toolbelt可能是第二個用於工作時帶有舊版工頭的Heroku Toolbelt。 – Saneef 2013-02-10 05:04:32

4

我有同樣的問題(ruby 1.9.3-p0,rails 3.2rc2,OSX 10.7)。

解決了這個問題,通過使用foreman-0.27.0將此行添加到我的Gemfile中。

gem 'foreman', '0.27.0' 
+0

當我從heroku toolbelt軟件包中安裝了「更加一般的工頭」時,Mine工作了,從寶石中找到的那個沒有... – ijverig 2012-01-15 21:56:36

4

我也有同樣的問題,但有不同的解決方案。 (紅寶石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 

,它不再給我是個問題。

+0

沒有工作,顯示了一些關於webrick的INFO消息,但它仍然只顯示引導在ctrl-c之後的消息... – ijverig 2012-01-07 00:56:50

+0

這適用於我(OSX 10.8,工頭0.60.2),謝謝 – grilix 2012-12-07 11:37:37

+0

它對我也不起作用。獲得同樣的錯誤。 – 2013-02-28 13:14:32

14

「工頭會向終端輸出顯示通過它啓動的進程寫入標準輸出的任何內容。」 - ddollar見foreman-issues#57

順便說一句,你可以使用tailf到Procfile看到日誌

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

提示:tailf不存在OSX使用-f尾-n 40日誌/ development.log作品。

+1

這個服務的目的相同,但沒有因爲某些原因改變了rails仍然沒有爲我緩衝它的緩衝區當我運行'rails console'並運行STDOUT.sync時,它返回true,所以它應該是沖洗的,但是工頭仍然沒有寫入任何來自worker的東西 – jrbalsano 2012-06-03 20:43:03

+2

Rails **只有**在下一個機架請求完成時寫入日誌文件,它由Rails :: Rack :: Logger中間件處理。您與哪位工作人員交談?Resque redis? – julionc 2012-06-06 18:21:21

+0

對不起,工作人員我的意思是尾巴-f正在運行。不知道爲什麼,但我肯定有一個開發環境,在這個環境中,web正在寫所有我目前看到的日誌輸出消息。 – jrbalsano 2012-06-07 00:40:50

20

我的解決方案是把$stdout.sync = true放在config/environments/deve的頂部lopment.rb。

然後加載開發環境(包括瘦)的一切都不會緩衝標準輸出。

4

如果您使用Foreman運行Python項目而不是Ryby項目,並且遇到同樣的問題,則可以使用以下解決方案。如果您使用的是Procfile直接調用蟒蛇CLI,那麼你可以使用「-u」選項,以避免標準輸出緩衝:

python -u script.py 

如果您使用的是Procfile來管理服務器WSGI,如調用gunicorn,瓶,瓶,前夕,等等,那麼你可以添加一個「.ENV」文件到你的Python項目的根,含有以下內容:需要整個軌道

PYTHONUNBUFFERED=True