我有以下项目布局(契约(Contract)):
project_root
└── Sources
└── App
├── main.swift
└── Models
└── SQL
└── createTables.sql
我试图在运行时读取 createTables.sql
文件,但 FileManager.fileExists()
说它不存在。我通过在 main.swift
中使用 #file
获得了路径:
let path = URL(fileURLWithPath: #file).deletingLastPathComponent().path + "/Models/SQL/createTables.sql"
打印出路径,好像是对的。 我猜测由于 Heroku 的 ephemeral filesystem 无法访问源代码树.我怎样才能解决这个问题并在运行时读取文件?
最佳答案
编译后使用drop.workdir
获取项目目录。
try String(contentsOfFile: drop.workDir + "Resources/SQL/createTables.sql")
请注意,我还将您的文件从 Sources
移到了 Resources
中。 Vapor 的项目布局并不是一成不变的,但目前的规则似乎是前者用于 Swift 文件,后者用于辅助文件。
关于swift - Heroku:如何读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41332945/