【问题标题】:Vapor 2.0: Where is the SQLite stored?Vapor 2.0:SQLite 存储在哪里?
【发布时间】:2017-10-24 10:33:34
【问题描述】:

我正在使用 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: error: unsatisfiable

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

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

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

【问题讨论】:

  • 一个小评论,以防其他人发现这一点,SQLite 默认捆绑在 Fluent 2 中作为我们的内存驱动程序,所以在任何你看到 SQLiteProvider 的地方,假设你已经得到它:)

标签: swift sqlite vapor


【解决方案1】:

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

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

我将它设置为我项目的父目录,data.sqlite 出现在那里。

但是,如果连 Spotlight 都找不到它们,我仍然想知道它们最初存储在哪里以及以什么名称。

【讨论】:

  • 当 Xcode 构建时,它会在不起眼的构建文件夹中进行构建,有时聚光灯不会启动,您可能在某个地方的奇怪 xcode 缓存中塞满了一些数据文件,很高兴您解决了它!
  • 如果您不使用自定义工作目录,它会将其放在类似以下位置:/Users/username/Library/Developer/Xcode/DerivedData/Project-dlznctnmjbjclzfvgfiarghfckgq/Build/Products/Debug/db.sqlite
  • 这假设你是从一个 Xcode 项目中运行的(这不被视为生产的东西)。如果你使用vapor run 运行它,它会放在当前目录中。
【解决方案2】:

终端find 命令行可用于查找 Spotlight Search 无法找到的“data.sqlite”(或其他已知数据库名称)文件:

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-version4.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

结果:在Config/sqlite.json 中指定的路径/to/VaporDefaultExample/FindMeSQLite.sqlite 中找到“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

结果:“FindMeSQLite.sqlite”再次在path/to/VaporDefaultExample/FindMeSQLite.sqlite 找到,如Config/sqlite.json 中指定的那样

注意:如果 .sqlite 位置与您的配置不同,那么 macOS 或 Ubuntu 上的 find 应该显示这样的位置。

【讨论】:

    【解决方案3】:

    当您使用 XCode 构建和运行您的 Vapor 项目时会发生这种情况。 Xcode 为每个处于开发阶段的应用程序使用本地临时目录。 在终端中使用 Vapor 的 CLI

     $ vapor build 
     $ vapor run
    

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

    【讨论】:

      猜你喜欢
      • 2012-01-28
      • 2017-02-06
      • 1970-01-01
      • 2013-03-25
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      • 1970-01-01
      相关资源
      最近更新 更多