Сбой Vapor при использовании MongoSwift в Ubuntu - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь создать 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 ]

1 голос
/ 16 июня 2019

Я один из разработчиков MongoSwift.

Как вы установили драйвер C?

Может произойти сбой с первой строки, где вы делаете try! MongoClient(), вы можете попробовать поместить это в попытку / поймать какну.

Также просто заметка, вы можете упростить код вашей коллекции до:

let collection = db.collection("myCollection")

Вам нужно использовать createCollection, только если вы хотите создать коллекцию не по умолчаниюопции.В противном случае коллекция будет создана автоматически при первом ее использовании (в этом случае при добавлении индекса).

1 голос
/ 14 мая 2019

среда исполнения swift MacOS! = Среда исполнения swift Linux. Это означает, что код, который прекрасно работает и работает в MacOS, не часто компилируется в Linux. Я реализовал несколько проектов Linux Swift, и я предлагаю: разработать проект Linux Swift в Linux с самого начала проекта! Для вашего случая:

1) В большинстве случаев проект Linux swift запускается в рабочем режиме с использованием Docker.

2) Получить хост Linux с той же средой, что и в контейнере Docker

3) Перенос вашего проекта на хост Linux

4) На хосте Linux вы можете собрать, выполнить и отладить его.

Кроме того, для одного из моих проектов Linux Swift, когда мне нужен доступ к MongoDB, я протестировал несколько фреймворков, и MongoKitten был лучшим для меня.

...