2016-11-10 21 views
4

私のプログラムはHeroku上で正常に動作しているようですが、3-4回ページをリロードした後にクラッシュし、エラーH13: Connection closed without responseが発生します。 しかし、それは私のコンピュータ上で実行すると、完璧に正常に動作し、エラーも発生しません。ここで蒸気誤差H13 on Heroku

は私のコードです:

#if os(Linux) 
    import Glibc 
#else 
    import Darwin 
#endif 
import Vapor 

let arrayA: [String] = ["some strings here"] 

let arrayB: [String] = ["more strings there"] 

let arrayC: [String] = ["and some more here"] 

func buildName (from arrayA: [String], and arrayB: [String], and arrayC: [String]) -> String { 
    #if os(Linux) 
    let a: Int = Int(random() % (arrayA.count + 1)) 
    let b: Int = Int(random() % (arrayB.count + 1)) 
    let c: Int = Int(random() % (arrayC.count + 1)) 
    #else 
    let a: Int = Int(arc4random_uniform(UInt32(arrayA.count))) 
    let b: Int = Int(arc4random_uniform(UInt32(arrayB.count))) 
    let c: Int = Int(arc4random_uniform(UInt32(arrayC.count))) 
    #endif 

    return (arrayA[a] + " " + arrayB[b] + " " + arrayC[c]) 
} 

let defaultHead: String = "<head><meta charset='utf-8'></head>" 

//create Droplet object 
let drop = Droplet() 

// REGISTER Routes and handlers 
drop.get { req in 
    return buildName(from: arrayA, and: arrayB, and: arrayC) 
} 

// Start the server 
drop.run() 

私が間違って何をしているのですか?

+0

このエラーはこのコードからは発生しません。代わりにHerokuの設定を確認してください。 – Moritz

+0

H13 - 応答なしで接続が閉じられました このエラーは、Web dynoのプロセスが接続を受け入れるが、何も書き込まずにソケットを閉じるとスローされます。なぜこのようなことが起こるのか分かりませんが、リロード後にはどこかに書かれていないソケット接続があったことは明らかです。 –

+0

@EricAya具体的にどの設定をチェックする必要がありますか?私は実際にそれらを変更していません( 'https:// github.com/kylef/heroku-buildpack-swift.git'バックパックの追加は別です)。 – Walkersneps

答えて

0

let a: Int = Int(random() % (arrayA.count + 1))

この行番号がArrayA.countに等しいかもしれ生成します。 したがって、fatal error: Index out of rangeを生成することがあります。

私はこれが主な理由だと思います。

0

arc4random_uniformはlinuxでは動作しません。 これを代わりに使用してください:

public static func randomInt(min: Int, max:Int) -> Int { 
     #if os(Linux) 
      return Glibc.random() % max 
     #else 
      return min + Int(arc4random_uniform(UInt32(max - min + 1))) 
     #endif 
    }