Rails 4.1.8 上的 LiveReload 在 Chrome 或 Safari 中不工作

LiveReload on Rails 4.1.8 Not Working in Chrome or Safari

我在设置实时重新加载方面遇到了麻烦。也许其他人可以看到我所缺少的东西。首先是错误(来自 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

我安装了什么:

我对我的应用程序所做的应该使它起作用的更改是:

# 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

可能性2:35729端口被占用

可能其他进程正在侦听端口 35729,导致您在 Chrome 中看到的连接错误。要检查是否是这种情况,请退出守卫进程,然后 运行:

netstat -an | grep 35729

如果您看到类似这样的内容,则表示另一个 process/app 正在侦听该端口:

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 服务器的连接,请转到系统偏好设置 → 网络和 select 您的活动网络适配器(例如 WiFi、以太网)。然后按高级并转到代理选项卡。确保列出了这些条目:

localhost
127.0.0.1