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