2015-04-05 77 views
1

我很費時間設置實時重新加載。也許別人可以看到我錯過了什麼。首先,錯誤(從Chrome中):LiveReload on Rails 4.1.8無法在Chrome或Safari中使用

WebSocket connection to 'ws://localhost:35729/livereload' failed: Connection closed before receiving a handshake response 
WebSocket connection to 'ws://localhost:35729/livereload' failed: Error in connection establishment: net::ERR_TUNNEL_CONNECTION_FAILED 

我裝什麼:

  • 的Rails 4.1.8
  • 機架livereload(0.3.15)
  • RB-fsevent(0.9.4 ,0.9.3)
  • 護livereload(2.4.0)

我已經在我的應用日所做的更改在應該使這個工作是:

# Gemfile 
gem "guard", ">= 2.2.2",  :require => false 
gem "guard-livereload",  :require => false 
gem "rack-livereload" 
gem "rb-fsevent",    :require => false 

# development.rb 
config.middleware.insert_after(ActionDispatch::Static, Rack::LiveReload) 

我已經middleware.use試過這個問題,以及和仍然得到同樣的錯誤。我查看了端口35729上是否有其他觀察者,並且沒有任何明顯的彈出。

任何關於如何讓這個工作的指針,讚賞!謝謝。

回答

2

你的配置看起來正確。下面是一些採取步驟解決問題:

可能性1:不兼容的版本LiveReload

也許guard-livereload(服務器)和rack-livereload(客戶端)的版本不兼容。同時升級到最新版本是安全的:

bundle update guard-livereload rack-livereload 

可能性2:端口35729被佔用

也許一些其他進程正在偵聽端口35729,導致你看到Chrome的連接錯誤。要檢查是否是這種情況,退出防護進程,然後運行:

netstat -an | grep 35729 

如果你看到這樣的事情,這意味着另一個進程/應用程序是該端口上偵聽:

tcp4  0  0 *.35729    *.*     LISTEN  

你可以嘗試更改LiveReload以使用不衝突的端口。在Guardfile,添加:port選項,如:

guard :livereload, :port => "56789" do 
    ... 
end 

您還需要在development.rb類似的變化:

config.middleware.use(Rack::LiveReload, :live_reload_port => 56789) 

可能性3:行爲不端的代理

ERR_TUNNEL_CONNECTION_FAILED錯誤是apparently Chrome HTTP代理無法轉發Web套接字請求時發送的消息。如果您配置了HTTP代理,則可能是問題所在。

爲確保代理不干擾與本地LiveReload服務器的連接,請轉到系統偏好設置→網絡,然後選擇您的活動網絡適配器(例如WiFi,以太網)。然後按高級並轉到代理選項卡。確保列出這些條目:

localhost 
127.0.0.1 
+0

我做了包更新,使用'netstat'進行了檢查,沒有其他偵聽器,並且更改了端口。還是行不通。我禁用了GlimmerBlocker,甚至還沒有工作。任何其他想法? – 2015-04-05 21:53:28

+0

對不起,我很難過!看起來像代理問題,基於以下搜索結果:https://code.google.com/p/chromium/issues/detail?id = 454311。 – 2015-04-05 23:12:57

+0

你是真的。我正在運行GlimmerBlocker,它將HTTP代理到8228端口。它擺脫了所有那些煩人的Flash廣告和內容。我所做的修復是進入網絡設置>以太網,併爲代理添加一個localhost和127.0.0.1排除。你能否回答這個問題,我可以給你信用? – 2015-04-05 23:44:44

相關問題