问题标签 [server-side-swift]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
135 浏览

swift - 部署 init vapor 4 项目导致错误

我尝试在 Heroku 和 Digital Ocean 上部署一个 init vapor 4 项目并不断收到相同的错误:

我的快速包裹指向:

0 投票
1 回答
267 浏览

vapor - 如何将蒸汽 4 降级为蒸汽 3?

我刚刚第一次下载了vapor,我得到了vapor 4,不幸的是,我所有的教程都是建立在vapor 3上的,如何降级vapor版本?

0 投票
1 回答
165 浏览

swift - 使用 Xcode 在 MacOS 上进行服务器端 Swift 开发,在 Docker Ubuntu 上进行测试:我如何不每次都清理/重新创建?

这是我的开发设置:

在 MacOS 上,我使用 Xcode 来编辑和构建(但不运行)我的代码(我在 Xcode/MacOS 下构建只是为了确保项目中没有语法错误)。我swift package generate-xcodeproj用来创建 Xcode 项目,之后对 Xcode 项目进行一些脚本调整,因为我需要添加一些设置。

在运行 Ubuntu 的 Docker 容器中,在 Mac OS 的终端窗口中,在与 Mac OS 相同的目录中,我运行我的测试。

我遇到的问题是每次我切换“边”时——开始在 Docker/Ubuntu 中进行测试,或者开始在 Xcode 中编辑,似乎我必须删除 .build 文件夹。然后涉及下载和构建所有包。

如果我在没有清理和重建 Xcode 项目的情况下从 Docker/Ubuntu 工作到 Xcode/MacOS,我会在 Xcode 中构建我的服务器: Xcode 构建错误

如果我生成 Xcode 项目,然后尝试在 Docker/Ubuntu 上构建和测试,swift test则对所有包进行更新,这需要时间,然后必须构建项目。在 Docker/Ubuntu 上运行测试后,当我回到 MacOS 并尝试在 Xcode 中构建项目时,我遇到了失败: 在此处输入图像描述

对于它的价值,在 Mac OS 上,这是我的 Swift 版本:Apple Swift 版本 5.2.2 (swiftlang-1103.0.32.6 clang-1103.0.32.51)

在 Linux 上:Swift 版本 5.2.3 (swift-5.2.3-RELEASE)

这真的让我不得不重新生成项目,重新下载包,并在每次切换时在每一侧重建。想法?

0 投票
0 回答
88 浏览

nginx - Nginx 返回 404

我开始我的项目(api-template)在本地主机(pid 8907)上与主管一起运行。

在此处输入图像描述

这是我的项目supervisor.conf文件:

这是我的 nginxsites-avilable/default文件:

Nginx 成功运行,但没有“重定向”到我的 localhost 项目并返回 404 错误。当我在没有 nginx 的情况下运行项目时,它可以成功运行。

[ 在此处输入图像描述4 [ 在此处输入图像描述5

0 投票
1 回答
3226 浏览

swift - Xcode 使用 Swift 包给出“在范围内找不到类型 'TYPE'”错误

多年来,我一直在使用服务器端 Swift 进行服务器端开发,并使用 Xcode 作为方便的编辑工具。现在 Xcode 已经支持 Swift 包,情况总体上有所改善。我没有针对任何传统的 Apple 硬件,所以这可能是我的问题的根源,但鉴于这个问题最近才开始出现,我正在报告它以防其他人也遇到它。

使用我的一个包: http: //github.com/SyncServerII/ServerDropboxAccount.git 我不能再用 Xcode 构建它。

我的意图主要是编辑和消除语法错误——即,我使用 Xcode 作为编辑器。在某些情况下,使用这些服务器端包,我可以在 Xcode 中运行单元测试。在某些情况下,我必须在我的 Ubuntu 目标平台上运行测试。

就在过去的几天里,我不能再在 Xcode 中构建这个特定的包,也不能在 Mac OS 的命令行中构建。

我收到这样的错误:

swift build当我在 Mac OS 的命令行中使用时,我得到了同样的错误。但是,当我swift build在 Ubuntu 上使用时,我没有收到任何错误 - 包构建得很干净。

在 Mac 操作系统上:

在 Ubuntu 上:

这可能是一个边缘用例,但在我完全放弃使用 Xcode 之前,我想了解为什么会发生这种情况。想法受到赞赏。谢谢!

我在这个问题中包含了一个标签,Kitura因为我的服务器是基于 Kitura 的。而且因为 Kitura 最近经历了一些转变,从 IBM 转移到社区支持。

0 投票
1 回答
104 浏览

swift - Vapor - 使用 ID 创建房间会话

我正在研究 Vapor 后端,我正在寻找为单次输入创建会话。客户端应要求创建会话,后端将返回客户端可以使用的会话 ID。
这是大纲:

现在,我试图找出在哪里存储会话数据和 ID 以供以后使用,并在x一段时间后可能会破坏。
我已经阅读了有关授权和会话的 Vapor 文档,但找不到适合我需要的东西,或者至少不是我可以直观地实现的方式,因为我的后端编程经验不是很好。
我将如何实施这样的会话?我在哪里存储凭据以及以后如何访问它们?
提前非常感谢!

0 投票
1 回答
170 浏览

swift - 在 Vapor 4 中的文件流之后运行操作

我运行一个处理大文件(上传和下载)的网站。目前我正在将网站从 Perfect 转换为 Vapor。在 Perfect 中,将文件流式传输给用户相对简单,然后在文件完成后执行一些操作。

我正在尝试在 Vapor 中做同样的事情,但我似乎无法弄清楚如何在流完成时设置回调,以及当它完成时,无论是用户完全下载还是中断。

有谁知道如何做到这一点?以下是我尝试过的一些事情。

这是基本结构

第一次修改

第二次修改

在上述所有情况下,所有处理都会立即完成(可能是因为我们正在处理期货和承诺,而且一切都是异步的)。

我的问题是,Vapor 中是否有任何方法可以知道大文件何时完成流式传输以及流式传输的结果是什么?也许是一些中间件?

0 投票
0 回答
22 浏览

swift - 基于 Swift 服务器计时器的线程在 AWS 上的 Docker 容器重新部署中幸存下来

在我的基于 Swift 语言的服务器的临时设计中,它由两个主要部分组成:

  1. 一个请求处理部分,它只处理服务器 API 的 HTTP 请求。对于服务器来说,这只是常规操作。

  2. 一个基于计时器的线程,它定期唤醒和处理某些类型的请求创建的任务。这些任务位于服务器的两个部分都可以访问的数据库表中。

服务器的这两个部分位于同一个 Docker 容器中,并在 AWS Elastic Beanstalk 上运行。我关心的是第二个基于计时器的部分。

它使用以下计时器:

在服务器启动时调用它,如下所示:

奇怪的是,当我部署一个新的服务器版本(一个新的 Docker 容器)时,我发现至少在某些情况下,服务器的基于计时器的部分不会关闭。我已经采取了一些服务器端步骤(https://github.com/SyncServerII/ServerMain/issues/14),这些步骤在新部署时对服务器实例进行干净/完全重启以解决此问题,但它仍然很好奇我。似乎这些计划的计时器实例不应该在 Docker 容器更换后继续存在。

我的猜测是,我正在使用的计时器必须以某种方式有效地保留对正在运行的代码的引用,并且即使在新的 Docker 容器部署中也保留了该引用和计时器。

[对于那些可能会问的人:您为什么以这种方式使用计时器?我不打算长期这样做。我计划将服务器的第二部分转移到 AWS Lambda 之类的东西上,但还没有这样做]。

0 投票
0 回答
16 浏览

swift - 如何在 Vapor Fluent sqlite 中使用正则表达式?

我有一个简单的模型,它有一个字符串字段,如下所示:

我想name使用正则表达式模式查询和过滤这个字段。

我目前的解决方案是使用.all()获取所有行,然后使用正常NSRegularExpression方式过滤 Swift 中的每一行。

然而,这真的很慢。.filter()在我的机器上,我可以使用 ORM 框架提供的函数每秒处理大约 400 个请求。而我自己的正则表达式过滤器每秒只有 4 个请求。

我知道 sqlite 确实提供了一个REGEXP功能,而且速度要快得多。但它需要加载一个外部模块才能运行。

那么如何使用 FluentSQL 导入这个模块,或者有什么解决方法吗?