Sidekiq worker displaying 'ERROR: heartbeat: "\xE2" from ASCII-8BIT to UTF-8' every two seconds

Sidekiq worker displaying 'ERROR: heartbeat: "\xE2" from ASCII-8BIT to UTF-8' every two seconds

我是一名初级开发人员,在 Rails 应用程序上开发 Ruby,该应用程序在前端使用 React。最近我开始收到此错误,但不知道是什么原因造成的。谁看过这个吗? enter image description here

如果图像没有显示,这就是终端返回的内容:

2020-08-14T16:14:36.743Z 37931 TID-oxmbyiczg INFO: See LICENSE and the LGPL-3.0 for licensing details.
2020-08-14T16:14:36.743Z 37931 TID-oxmbyiczg INFO: Upgrade to Sidekiq Pro for more features and support: http://sidekiq.org
2020-08-14T16:14:36.743Z 37931 TID-oxmbyiczg INFO: Booting Sidekiq 5.0.5 with redis options {:id=>"Sidekiq-server-PID-37931", :url=>nil}
2020-08-14T16:14:36.748Z 37931 TID-oxmbyiczg INFO: Starting processing, hit Ctrl-C to stop
2020-08-14T16:14:36.757Z 37931 TID-oxmddbzao ERROR: heartbeat: "\xE2" from ASCII-8BIT to UTF-8
2020-08-14T16:14:41.773Z 37931 TID-oxmddbzao ERROR: heartbeat: "\xE2" from ASCII-8BIT to UTF-8
2020-08-14T16:14:46.776Z 37931 TID-oxmddbzao ERROR: heartbeat: "\xE2" from ASCII-8BIT to UTF-8
2020-08-14T16:14:51.783Z 37931 TID-oxmddbzao ERROR: heartbeat: "\xE2" from ASCII-8BIT to UTF-8```

一些背景知识:processSets 遍历 workers,然后他们每五秒向 redis 发送一次心跳,以检查正常运行时间和与 redis 实例的连接。

首先我会检查服务器和客户端计算机上的 Encoding::default_external 并确保为两者都设置了 Encoding::UTF_8。其次确保 config.encoding = "utf-8" 设置在工人所在的 application.rb 中 运行.

但以上内容非常笼统,无法解释您看到的错误,该错误来自此块:

def ❤(key, data)
  begin
    # logic
  rescue => e
    # ignore all redis/network issues
    logger.error("heartbeat: #{e.message}")
  end
end

上面是从heartbeat调用的,从start_heartbeat调用的,在run中调用的。用于心跳的密钥来自 util.rb 中的 identity 方法(在 Sidekiq 存储库中),它来自 hostname ,这是一种调用 Socket.gethostname 的方法,它按照它说的做在获取服务器的主机名时,returns 平台特定编码中的主机名。

因此,如果我们必须走到这一步,请找到机器 运行 工作人员的服务器名称并启动控制台并检查 Socket.gethostname 的编码值,这应该可以解释错误。