2016-12-26 3 views
1

У меня есть следующий макет проекта (контракт):Heroku: как читать файл?

project_root 
└── Sources 
   └── App 
     ├── main.swift 
    └── Models 
       └── SQL 
          └── createTables.sql 

Я пытаюсь прочитать файл createTables.sql во время выполнения, но FileManager.fileExists() говорит, что не существует. Я получил путь с помощью #file в main.swift:

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

Распечатывая путь, кажется правильным. Я предполагаю, что исходное дерево недоступно из-за Heroku's ephemeral filesystem. Как я могу обойти это и прочитать файл во время выполнения?

ответ

2

Используйте drop.workdir, чтобы получить каталог проекта после компиляции.

try String(contentsOfFile: drop.workDir + "Resources/SQL/createTables.sql") 

Примечание Я также переместил свой файл из Sources и в Resources. Макет проекта Vapor не установлен в камне, но в настоящее время правило, похоже, состоит в том, что первое предназначено для файлов Swift, а второе - для вспомогательных файлов.