String(contentsOfFile:encoding :)以退出状态139中止

时间:2016-12-26 11:57:07

标签: swift file heroku file-io swift3

我试图在我的Swift 3.0.2中调用String(contentsOfFile:encoding:)(也发生在3.0.1上)Heroku上的服务器应用程序(在Ubuntu上运行它),但该函数中止该程序。 heroku logs中显示以下错误:

2016-12-26T01:59:01.304535+00:00 heroku[web.1]: Process exited with status 139

除此之外没有任何错误消息。我尝试阅读的文件与应用程序的源文件位于同一目录树中。这是实际代码的功能等效收缩(位于main.swift的顶层):

let sqlDirectory = URL(fileURLWithPath: #file).deletingLastPathComponent().path + "/Models/SQL/"

do {
    print("reading")
    fflush(stdout)
    let a = try String(contentsOfFile: sqlDirectory + "createTables.sql", encoding: .utf8)
    print("done")
    fflush(stdout)
} catch {
    print("error")
    fflush(stdout)
}

sqlDirectory的运行时值为/tmp/build_514c5587b46ef976e60d4f039b4d048d/Sources/App/Models/SQL/(每个构建中的哈希值不同)。打印reading后崩溃。永远不会打印doneerror。 (stdout刷新仅用于调试以确保所有内容都写入stdout。删除它们不会影响崩溃。)

这是关于什么以及我该如何解决?

我还将此报告为错误here,因为它似乎可能是一个错误。

1 个答案:

答案 0 :(得分:0)

我查看了FileManager.default.fileExists(atPath: sqlDirectory + "createTables.sql")false的结果。

这就解释了为什么String(contentsOfFile:encoding:)崩溃了。虽然它应该抛出错误而不是崩溃。以下是基本错误:https://bugs.swift.org/browse/SR-1547,这似乎是由此错误引起的:https://bugs.swift.org/browse/SR-585

我仍然需要找出Heroku上没有路径的原因。也许Heroku在构建后移动或删除所有源文件?