Heroku 偶尔返回未找到的“主机名”

Posted

技术标签:

【中文标题】Heroku 偶尔返回未找到的“主机名”【英文标题】:Heroku sporadically returns "hostname" not found 【发布时间】:2013-07-15 12:49:02 【问题描述】:

我正在创建一个在 Heroku 上使用 Rails API 后端的 ios 应用。定期(每 20 个 API 调用一次),找不到 heroku。返回以下 NSError:

Error Domain=NSURLErrorDomain Code=-1003 "A server with the specified hostname could not be found." UserInfo=0x755ce00 NSErrorFailingURLStringKey=https://xxx.herokuapp.com/api/v1/matchups, NSErrorFailingURLKey=https://xxx.herokuapp.com/api/v1/matchups, NSLocalizedDescription=A server with the specified hostname could not be found., NSUnderlyingError=0x71ca730 "A server with the specified hostname could not be found."

【问题讨论】:

只是想确认我在 Heroku ATM 上也遇到了这种情况。 (而且我的测功机没有睡觉) 这不是(完全)与 Heroku 相关的,我在不同的平台上看到了同样的事情。 我们也在 Heroku 后端和 iOS 客户端中看到了这一点。 Dynos 没有睡觉,请求没有击中 Heroku。 @Michael Guren 如果您找到了根本原因,请告诉我。 【参考方案1】:

您的 iPhone/iPad 所连接的网络似乎存在 DNS 问题。可以肯定的是,请尝试以下任一方法:

1) 将您的主机名更改为 IP 地址而不是字符串主机名,并在 HTTP 请求中添加 Host: 标头。

2) 如果 (1) 很难,请将 iPhone 的 DNS 设置为 LAN 上的 PC,并在该 PC 上安装 DNS 服务器,并直接从 PC 提供至少该特定地址(不要为此递归)域)。

【讨论】:

这不是必须在heroku方面进行调整的吗? 据我所知,您不能将硬编码的 IP 与 heroku 一起使用。如果您执行 nslookup myapp.herokuapp.com,您几乎每次都会获得不同的 IP。 Heroku 返回路由器的 IP 地址,然后路由器获取请求并将其转发到真实服务器。【参考方案2】:

您似乎受到了 Dyno 睡眠行为的打击。请检查this documentation,特别是Dyno sleep部分,并确保您理解它。 此外,还有多种方法可以让应用保持运行状态,例如定期 ping 站点。

另一个选项是 DNS,在您的计算机上创建一个 Ad-Hoc 网络并将您的 iphone 连接到该网络。使用 wireshark 进行网络捕获并分析 DNS 和 HTTP 响应。

【讨论】:

感谢您的回复,但这不是测功机睡眠问题。我的 iOS 应用程序上有一个刷新按钮,我可以在 1 分钟内重复刷新大约 15-20 次,偶尔,其中一次刷新会导致找不到主机名错误。有什么想法吗?【参考方案3】:

您的网址 = https://xxx.herokuapp.com/api/v1/matchups

您是否与您的域提供商明确指定您的子域 xxx 以指向您的服务器 IP?

如果没有,请尝试将您的子域 xxx 指向您的服务器 IP 的新 A 记录。

希望对您有所帮助。

【讨论】:

以上是关于Heroku 偶尔返回未找到的“主机名”的主要内容,如果未能解决你的问题,请参考以下文章

SVN服务器只能通过ip访问!不能通过服务器的主机名访问。具体情况如下:

从主机名中提取域名

如何让 AWS ELB 将实际主机名而不是 ELB 的主机名转发到目标组?

修改主机名脚本

主机名未解析为 IP WHM/cPanel

iPhone/iPad 模拟器主机名