Vapor 2.0:SQLite存储在哪里?

时间:2017-05-24 07:56:10

标签: swift sqlite vapor

我正在使用Vapor和内置的SQLite 3驱动程序:https://github.com/vapor/sqlite

所以我在 fluent.json 中将"driver": "memory"更改为"driver": "sqlite"并创建 sqlite.json

{
    "path": "data.sqlite"
}

但即使我使用Spotlight搜索,我也找不到任何名为data.sqlite的文件。我不能使用sqlite-provider,这在我发现的许多教程中都很流行,因为它与Vapor 2不兼容: 无法生成Xcode项目:swift-package:错误:不可满足

但是数据存储在某个地方:我可以重启我的Mac,运行Vapor并查看所有数据。

我在这里已经阅读了很多类似的问题,但没有一个作者使用过Vapor,所以这些答案对我没有帮助。我需要获取此data.sqlite文件位置。我究竟做错了什么?

P.S 我正在使用Xcode 8.3.2,Swift 3.1,Vapor 2.0.1。 SQLite3已安装。

3 个答案:

答案 0 :(得分:2)

好吧,我还是不明白Vapor存储数据库文件的位置,但我找到了这个解决方案:

Xcode > Product > Scheme > Edit Scheme > Options >  Use Custom Working Directory

我将其设置为我项目的父目录,并在那里显示data.sqlite。

但是,即使Spotlight无法找到它们,我仍然想知道它们最初存储在何处以及以何种名称存储。

答案 1 :(得分:2)

终端find命令行可用于查找" data.sqlite" (或其他已知数据库名称)文件无法通过Spotlight搜索找到:

sudo find / -name "data.sqlite" -print

在Vapor 2中,SQLite是Fluent的一部分,因此不再需要SQLiteProvider。使用SQLiteProvider的教程将使用FluentProvider

对于Vapor 2默认api模板,包含Fluent。对于Vapor 2非默认web模板,需要将fluent-provider添加到Package.swift,然后在代码中进行配置。

适用于swift package tools-version 3.1.0

dependencies: [
    …
    .Package(url: "https://github.com/vapor/fluent-provider.git", majorVersion: 1),

适用于swift package tools-version 4.0.0

dependencies: [
    …
    .package(url: "https://github.com/vapor/fluent-provider.git", .upToNextMajor(from: "1.3.0")),

我发现为Vapor 2生成SQLite文件的位置如下......

vapor --version
# Vapor Toolbox: 2.0.3
# Vapor Framework: 2.1.0
vapor new VaporDefaultExample
cd VaporDefaultExample/Config
nano fluent.json # edit to: "driver": "sqlite" 
nano sqlite.json # create file. add { "path":"FindMeSQLite.sqlite" }

请注意,Config/sqlite.json文件中指定了预期的.sqlite位置。

cd ..
vapor update
vapor build
vapor run &
sudo find / -name "FindMeSQLite.sqlite" -print

结果:" FindMeSQLite.sqlite"在{/ 1}}

中指定的路径/到/ VaporDefaultExample / FindMeSQLite.sqlite中找到
Config/sqlite.json

结果:" FindMeSQLite.sqlite"再次在# ^C quit the previous vapor run # then create Xcode project vapor xcode -y # run project in Xcode # then, repeat the find sudo find / -name "FindMeSQLite.sqlite" -print

中指定的path/to/VaporDefaultExample/FindMeSQLite.sqlite找到

注意:如果您的配置的.sqlite位置不同,则macOS或Ubuntu上的Config/sqlite.json应显示此位置。

答案 2 :(得分:0)

当您使用XCode生成并运行Vapor Project时,会发生这种情况。 Xcode对处于开发阶段的每个应用程序都使用本地临时目录。 在终端

中使用Vapor的CLI
 $ vapor build 
 $ vapor run

这将删除所有旧数据库,并在主目录中创建一个新的.sqlite文件。