在Ubuntu上使用MongoSwift时,蒸气会崩溃

时间:2019-05-13 17:05:17

标签: swift mongodb ubuntu vapor

我正在尝试为我的应用创建蒸气API。在我的本地计算机(Mac OS)上,我所有的代码和API均正常运行,但是当我将其上传到ubuntu服务器时,它崩溃了...

我已经做了以下代码:

vapor clean vapor update vapor build

这些命令都不返回任何类型的错误,但是当我运行蒸气时,会发生以下情况:

root@rt-server:/usr/local/uprising/server# vapor run Running server ... root@rt-server:/usr/local/uprising/server#

进行一些搜索并尝试解决我的问题,我发现如果注释以下代码(configure.swift),则可以使蒸气运行:

//     Register Mongo Client
let client = try! MongoClient()
let db = client.db("myDB")
let collection:MongoCollection<Document>
do {
    collection = try db.createCollection("myCollection")
} catch {
    collection = db.collection("myCollection")
}
// Create an unique index on timestamp
// because I expect only one daily
let indexOptions = IndexOptions(name: "timestamp", unique: true)
let model = IndexModel(keys: [ "timestamp": 1] , options: indexOptions)
do {
    try collection.createIndex(model)
} catch {
    print("Index already exist!")
}
services.register(client)

我有一些问题也许可以帮助我弄清楚如何解决我的问题:

  • 如何在ubuntu上使用命令行调试蒸气?在我的Mac中,当我使用xcode时很容易...

  • 我可以测试我的MongoDB C驱动程序是否正确安装吗?

  • 有人知道我在做什么错吗?它在我的Mac上完美运行...

对不起,我很抱歉...如果有人知道如何帮助我,我将不胜感激!

2 个答案:

答案 0 :(得分:1)

我是MongoSwift的开发人员之一。

您如何安装C驱动程序?

崩溃可能来自您执行try! MongoClient()的第一行,您可能还希望尝试将其放入try / catch。

也请注意,您可以将收藏代码简化为:

let collection = db.collection("myCollection")

如果您要使用非默认选项创建集合,则仅需要使用createCollection。否则,将在您第一次使用该集合时自动创建该集合(在这种情况下,当您添加索引时)。

答案 1 :(得分:0)

swift MacOS运行时环境!= swift Linux运行时环境。这意味着,在MacOS中构建并运行完美的代码很少在Linux中编译。我实现了几个Linux swift项目,我的建议是:从项目开始就在Linux中开发Linux swift项目! 对于您的情况:

1)在大多数情况下,Linux swift项目使用docker在生产环境中运行。

2)获取具有与Docker容器相同环境的Linux主机

3)将您的项目迁移到Linux主机

4)在Linux主机中,您可以对其进行构建,执行和调试。

另外,对于我需要访问MongoDB的Linux Swift项目之一,我测试了几个框架,MongoKitten对我来说是最好的。