我正在花很长时间设置实时重新加载。也许其他人可以看到我所缺少的东西。首先是错误(来自 Chrome):
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
- rack-livereload (0.3.15)
- rb-fsevent(0.9.4,0.9.3)
- guard-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 上是否有其他观察者,但没有弹出任何明显的消息。
任何有关如何实现此功能的指示都将受到赞赏!谢谢。
最佳答案
您的配置看起来正确。以下是一些需要采取的故障排除步骤:
可能性 1:LiveReload 版本不兼容
也许guard-livereload
(服务器)和rack-livereload
(客户端)的版本不兼容。为了安全起见,将两者都升级到最新版本:
bundle update guard-livereload rack-livereload
情况二: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当 HTTP 代理无法转发 Web 套接字请求时 Chrome 发出的消息。如果您配置了 HTTP 代理,这可能就是问题所在。
为确保代理不会干扰与本地 LiveReload 服务器的连接,请转至系统偏好设置 → 网络并选择事件网络适配器(例如 WiFi、以太网)。然后按“高级”并转到“代理”选项卡。确保列出这些条目:
localhost
127.0.0.1
关于ruby-on-rails - LiveReload on Rails 4.1.8 无法在 Chrome 或 Safari 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29461827/