Heroku:如何读取文件?
Heroku: how to read file?
我有以下项目布局(合同):
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 文件,后者用于辅助文件。
我有以下项目布局(合同):
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 文件,后者用于辅助文件。