Errno::EHOSTUNREACH in UsersController#create
No route to host - connect(2)
使用Rails应用程序发送邮件时出现此错误。
答案 0 :(得分:8)
错误Errno::EHOSTUNREACH: No route to host - connect(2)
表示路由问题,可能与错误的IP地址有关。您可能在/etc/hosts
(将hosts file将主机名映射到IP地址)或其他地方指定了错误的IP,例如在config / deploy.rb等中。如果您使用本地网络DHCP服务器,IP地址可以经常更改。
答案 1 :(得分:5)
建立在joeshmo的回答:
begin
# problematic code
rescue Errno::EHOSTUNREACH
# log the error
# let the User know
rescue
# handle other exceptions
end
答案 2 :(得分:1)
这可能不适用于您,但我遇到了类似的问题。我们的内部电子邮件服务器一直存在问题,网络主机有时无法将电子邮件发送到我们自己的地址。要解决我无法控制的问题,并防止500错误通过,我刚刚抓住了异常。
在发送电子邮件的控制器中,我打包了邮件程序:
Notifier.deliver_issue_updated(@issue, @changes, current_user)
喜欢这个
begin
Notifier.deliver_issue_updated(@issue, @changes, current_user)
rescue
flash[:notice] += " Unable to deliver email notices."
end
现在通知用户该电子邮件没有发出,但没有被500错误打扰。
希望有所帮助。
答案 3 :(得分:1)
如果您正在进行厨师 - 客户端部署,那么在client.rb中错误的 HOST / SERVER IP 会出现问题
cd /etc/chef/
编辑client.rb
chef_server_url "http://CORRECT_SERVER_IP:4000"
答案 4 :(得分:0)
好的,我得到了同样的错误。所以我在Onpremise
服务器'Z'上使用一个厨师服务器并试图引导一个节点'X'。所以我写了一本食谱,写了所有客户的主机名和ipaddresses,其中包括服务器'Y'的ip和主机名到/etc/hosts
。
这就是我犯的错误。
我使用Onpremise上的Chef server引导了云上的节点。
我确实改变了'Y'的网络接口并忘记了与'Z'的客户端ip与现在不同。后来我尝试用'Y'引导'X',但由于X /etc/hosts
包含旧的Y,所以它无法找到主机路由,因为它正在尝试旧的ip。
然后我尝试更改/etc/hosts
中的旧IP并再次运行chef-client
然后一切正常。希望这会对你有所帮助。
请记住,即使cname
指向不同的IP而不是指向的IP,您也可能会遇到此错误。
因此,每当您收到此错误时,请尝试从要运行chef-client的节点ssh到chef server ip并查看您是否能够连接。如果它没有连接,那么它意味着我在上面解释的相同
答案 5 :(得分:0)
检查防火墙是否关闭: 您可以运行以下命令
systemctl stop firewalld
systemctl disable firewalld