4

我正在尝试修复我最近在运行 Vapor 项目时遇到的错误。

它构建得很好,但是当它运行时,它会崩溃。这是我的日志:

fatal error: Error raised at top level: Fluent.EntityError.noDatabase: file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-800.0.58.6/src/swift/stdlib/public/core/ErrorType.swift, line 184
Current stack trace:
0    libswiftCore.dylib                 0x0000000100fe7cc0 swift_reportError + 132
1    libswiftCore.dylib                 0x0000000101004f50 _swift_stdlib_reportFatalErrorInFile + 112
2    libswiftCore.dylib                 0x0000000100fb3370 partial apply for (_assertionFailed(StaticString, String, StaticString, UInt, flags : UInt32) -> Never).(closure #1).(closure #1).(closure #1) + 99
3    libswiftCore.dylib                 0x0000000100dfb0a0 specialized specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> A) -> A + 355
4    libswiftCore.dylib                 0x0000000100fb32b0 partial apply for (_assertionFailed(StaticString, StaticString, StaticString, UInt, flags : UInt32) -> Never).(closure #1).(closure #1) + 144
5    libswiftCore.dylib                 0x0000000100dfb5b0 specialized specialized String._withUnsafeBufferPointerToUTF8<A> ((UnsafeBufferPointer<UInt8>) throws -> A) throws -> A + 124
6    libswiftCore.dylib                 0x0000000100f57af0 partial apply for (_assertionFailed(StaticString, String, StaticString, UInt, flags : UInt32) -> Never).(closure #1) + 185
7    libswiftCore.dylib                 0x0000000100dfb0a0 specialized specialized StaticString.withUTF8Buffer<A> ((UnsafeBufferPointer<UInt8>) -> A) -> A + 355
8    libswiftCore.dylib                 0x0000000100dfae80 _assertionFailed(StaticString, String, StaticString, UInt, flags : UInt32) -> Never + 144
9    libswiftCore.dylib                 0x0000000100e1e540 swift_unexpectedError_merged + 569
10   App                                0x0000000100001ef0 main + 2798
11   libdyld.dylib                      0x00007fff974375ac start + 1
Program ended with exit code: 9

我正在使用 VaporPostgreSQL 包。这是我的Package.swift

import PackageDescription

let package = Package(
    name: "mist",
    dependencies: [
        .Package(url: "https://github.com/vapor/vapor.git", majorVersion: 1, minor: 2),
        .Package(url: "https://github.com/vapor/postgresql-provider.git", majorVersion: 1, minor: 1)
    ],
    exclude: [
        "Config",
        "Database",
        "Localization",
        "Public",
        "Resources",
        "Tests",
    ]
)

并且main.swift

import Vapor
import VaporPostgreSQL
import Auth
import HTTP

let drop = Droplet()
let auth = AuthMiddleware(user: User.self)

try drop.addProvider(VaporPostgreSQL.Provider.self)
drop.preparations.append(Post.self)
drop.preparations.append(User.self)
drop.preparations.append(Site.self)
drop.middleware.append(auth)

let admin = AdminController()
var site = Site(name: "", theme: "")

if let retreivedSite = try Site.all().first {
    site = retreivedSite
} else {
    drop.get { req in
        return Response(redirect: "http://localhost:8080/login")
    }
}

drop.get { req in
    return try drop.view.make("Themes/VaporDark/index", [
        "posts": Node(node: JSON(Post.all().makeNode()))
    ])
}

admin.addRoutes(to: drop)

drop.resource("posts", PostController())

drop.run()

我的 postgres 版本是 9.6.1

由于某种原因,VaporPostgreSQL 不会更新,我认为这可能是问题的一部分。我已经尝试过vapor xcodevapor buildvapor clean但我无法获得最新版本。

在此处输入图像描述

4

2 回答 2

1

我认为问题在这里:

if let retreivedSite = try Site.all().first {
    site = retreivedSite
} else {
    drop.get { req in
        return Response(redirect: "http://localhost:8080/login")
    }
}

更具体地说,Site.all()通话。在调用命令之前,我们不会准备模型run(),因此,要在该点之前查找Site,需要手动准备模型。

希望这可以帮助!

于 2016-12-09T17:05:26.310 回答
0

一个。

您应该验证您的 secrets/postgresql.json 中的信息

{
    "host": "127.0.0.1",
    "user": "username",
    "password": "",
    "database": "nameofyourdb",
    "port": 5432
}

确保配置信息正确。尝试从终端手动连接到您的 postgresql 实例,并确保您的数据库确实存在。

B.

有时,数据会损坏。尝试恢复您的数据库实例并再次运行您的应用程序。如果您使用 Xcode 运行项目,您可以从 Edit scheme / Run / Arguments 执行此操作:

在此处输入图像描述

prepare --revert

请注意,控制台会询问您是否确定要执行该操作,您需要输入Y作为接受。之后,您需要删除上面的参数,下次运行应用程序时,它将有一个新的数据库。

警告:此操作将删除您的所有信息,因此您显然应该处于开发环境中,或者至少要备份您的信息。

于 2016-12-08T23:16:04.920 回答