2013-07-15 24 views
4

我正在創建一個在Heroku上使用Rails API後端的iOS應用程序。定期(每20個API調用一個),不能找到heroku。將返回以下NSError:Heroku零星返回「主機名」找不到

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." 
+1

只是想確認我在Heroku ATM上也遇到過這種情況。 (而我的測功機沒有睡覺) – lms

+0

這不是(完全)Heroku相關,我看到與不同平臺相同的東西。 – jimpic

+0

我們也看到這與Heroku後端和iOS客戶端。 Dynos不會睡覺,請求不會觸及Heroku。 @Michael Guren讓我知道你是否找到了根本原因。 – Fraggle

回答

0

看起來您正在遭受Dyno睡眠行爲的打擊。請檢查this documentation,特別是戴諾睡覺,並確保您瞭解它。 也有幾種方法來保持應用程序,如定期查看網站。

另一種選擇是DNS,在您的計算機上創建一個Ad-Hoc網絡並將您的iphone連接到該網絡。使用wireshark進行網絡捕獲並分析DNS和HTTP響應。

+2

我很欣賞這種迴應,但它不是睡眠問題。我的iOS應用上有一個刷新按鈕,我可以在1分鐘內反覆刷新大約15-20次,偶爾刷新其中一個會導致主機名未找到錯誤。有什麼想法嗎? –

0

看起來像您的iPhone/iPad連接到的網絡上的DNS問題。可以肯定,請嘗試以下任何一種方法:

1)將您的主機名更改爲IP地址而不是字符串主機名,並將Host:頭添加到HTTP請求中。 2)如果(1)很難,請將您的iPhone的DNS設置爲您的局域網中的一臺電腦,並在該電腦上安裝一臺DNS服務器,並至少直接從電腦提供該特定地址(不要遞歸該域)。

+0

難道不是Heroku一方需要調整的東西嗎? –

+0

不是。 OP發佈的錯誤在iPhone客戶端上。 –

+0

據我所知,您不能在heroku上使用硬編碼IP。如果你使用nslookup myapp.herokuapp.com,你幾乎每次都會得到不同的IP。 Heroku返回一個路由器的IP地址,然後該路由器獲取請求並將其轉發到真實服務器。 – Fraggle

0

你的URL = https://xxx.herokuapp.com/api/v1/matchups

你明確你的域名提供商指定的子域XXX直接到你的服務器IP?

如果不是,請嘗試添加一個新的A記錄,並將您的子域xxx指向您的服務器IP。

希望有所幫助。