【问题标题】:Failed to integrate SQLite in Vapor project未能将 SQLite 集成到 Vapor 项目中
【发布时间】:2017-08-15 19:41:36
【问题描述】:

我正在尝试将 SQLite 集成到 Vapor 项目中。我在Package.swift 文件中为Sqlite Provider 添加了包:

.Package(url: "https://github.com/vapor/sqlite-provider.git", majorVersion: 1, minor: 1)

并在 config 目录下创建了一个sqlite.json 文件,其中包含

{
    "path": "database_name.sqlite"
}

之后,我运行vapor clean && vapor xcode 将sqlite 集成到项目中。一切正常,除了现在项目显示两个 Swift 编译器错误

没有找到头文件'/usr/local/opt/sqlite/include/sqlite3.h'

无法构建 Objective-C 模块“CSQliteMac”

你能帮忙解决这个问题吗?

【问题讨论】:

  • SQLite好像没有正确安装,可能重新安装或者更新一下?

标签: swift sqlite vapor


【解决方案1】:

以下是您可能想做的事情:

1:首先检查/usr/local/opt/sqlite文件夹和该文件夹内的includes子文件夹是否存在。

2:如果/usr/local/opt/sqlite 文件夹不存在,您可能需要安装 SQLite。最简单的方法是通过 Homebrew - 如果你安装了它。只需从终端运行以下命令:

brew install sqlite

3:如果您没有 Homebrew,那么您必须决定是要安装 Homebrew 还是要尝试手动安装 SQLite 源代码。

希望这会有所帮助:)

【讨论】:

  • 我的mac确实有Homebrew,也预装了SQLite。因此,没有再次安装。你认为我应该卸载并重新安装它吗?
  • 我建议您首先检查错误消息中提到的包含文件是否存在。如果它存在,我怀疑还有其他错误。但如果指定路径中不存在,请尝试卸载并重新安装。
【解决方案2】:

感谢 @Fahimsqlite3.h 不在

/usr/local/opt/sqlite/include/sqlite3.h

就我而言,正确的位置是 /usr/local/Cellar/sqlite/3.17.0/include/sqlite3.h

只需在终端中运行以下命令:

brew install sqlite

如果您以前安装过,它将安装或更新。在完成的最后,您会看到 Summary 类似:

==> 总结
? /usr/local/Cellar/sqlite/3.17.0:11 个文件,2.9MB

这是给sqlite位置,/usr/local/Cellar/sqlite/3.17.0

现在单击第一条错误消息,它将带您进入module.modulemap 文件。替换位置并构建。它将成功构建。

【讨论】:

    【解决方案3】:

    很明显是mysql安装问题,按照以下步骤运行mysql vapor app。

    1. 先卸载安装的mysql。
    2. here 安装 brew 或运行以下命令

      /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
      
    3. 运行以下命令安装mysql

      brew install mysql
      
    4. 运行以下命令进行链接

      brew link mysql
      
    5. 运行以下命令启动mysql服务器

      mysql.sever start 
      
    6. 为root用户运行以下命令

      mysql -uroot
      
    7. 然后运行下面的命令来设置root用户密码

      SET PASSWORD = PASSWORD(‘admin’);
      
    8. 在运行项目之前创建数据库,使用以下命令

      create database your_database_name_goes_here;
      
    9. 然后运行你的项目,毫无疑问之后你的项目就会运行。

    注意 1:- 不要忘记在您的项目中添加 mysql.json,如 here 所述。

    .

    注意2:- 也不要忘记添加提供者并使用模型类准备数据库表,如下所示。

     try drop.addProvider(VaporMySQL.Provider.self)
     drop.preparations = [ModelClass.self]
    

    我在Github here创建了一个demo项目,你可以试试。

    【讨论】:

    • 这很好。但是你忘记了一些事情,我不是在处理mysql,而是SQLite。无论如何,谢谢。
    猜你喜欢
    • 2012-06-29
    • 2015-09-16
    • 1970-01-01
    • 2014-08-08
    • 2014-11-07
    • 2011-10-15
    • 2017-11-04
    • 2016-03-06
    • 2014-02-03
    相关资源
    最近更新 更多