原文:Hello Server Side Swifthtml
做者:Logan Wright前端
译者:CocoaChina--kmyhy(博客)linux
自从苹果官方发布了一个 Swift 的 Linux 开源版本以后,服务端 Swift 终于迎来了一个使人激动的前景。个人好奇心终于没法克制,是时候尝试一下服务端 Swift 了!git
除了用过几个 Baas 之外,我没有任何后端编程经验,但幸运的是开源社区已经提供了现成的框架。我试了一下Tanner Nelson 推荐的 Vapor 框架。它的使用很是简单,很是适合我当前的任务,在这篇文档中还会使用到 Heroku。我决定使用 Heroku 的缘由是咱们的后端团队在使用它,它对于前端来讲很是友好。github
写到这里的时候,为了解决 Heroku 框架运行中的几个小问题,我专门提交了一个 pull request 。若是代码还没被合并的话,请设置你的包管理器从 这里 下载。web
安装编程
要继续本教程,首先,你须要一个 Heroku 帐号 ,并安装好 Swift Development Snapshot 。写到这里的时候,在它的正式版中还未包含 swift 包管理器。所以为了使用这个工具,你必须下载开发版的 snapshot。json
开始swift
咱们的目标是建立一个简单的 Swift 服务器并运行在 Heroku 上。这不须要在 linux 环境下进行,就像是你在使用本地服务器。你只消建立一个本地的 Xcode 项目,对项目进行一些设置,而后就能够在 Swift 包管理器 中运行它。整过过程分为 4 个步骤:后端
将 main.swift 拷贝根目录下的 Sources 目录
建立一个 Package.swift 文件
将 .build 目录添加到 import paths
要使用自动补全和语法加亮功能,须要将 Swift 包管理器的 build 目录提交到 import paths 中。注意,在 import paths 的 Debug 中设置的 debug 目录,而 Release 项则输入 release 目录。
用 toolchain 运行 Xcode
若是你使用 Xcode 7.3,你能够用 Xcode > Toolchains 菜单开启一个Xcode 实例,用于打开 swift snapshot。由于咱们不能在 Xcode 中进行编译,咱们只能以命令行的方式进行编译。
编写服务器
令我高兴的是,为了进行概念验证,我须要编写的代码其实只有寥寥数行。我启动和运行服务器的代码甚至不到 10 行。
要启动服务器,只需在终端中输入一句命令,:
好了,让咱们打开浏览器。个人浏览器安装了 json 插件,你的画面或许会有不一样。
迁移到云上
服务器在本地顺利运行起来了,但若是放到云端则更好。我火烧眉毛地想将 App 在云上跑起来。对于我来讲这是一个全新的挑战,幸运的是,我获得了 Vincent Toms 的悉心指导。
Heroku 的安装是一件很是愉悦的体验,几分钟后我就建立了一个 Heroku App,接下来我就要上传个人项目了。
出错啦
这只是今天的诸多错误中的一个。我已经预计到事情不可能一路顺风,所以我查看了 Vapor 的文档,最终发现问题出在所谓的 buildpacks 上。Heorku 提供了一些标准的 buildpacks,但彻底没有针对 Swift 的 buildpacks。无奈之下求救于开源社区,恰好看到 Kyle Fuller 的 buildpack 。集成它就简单得多了。
用这个 buildpack 启动后,App 成功加载,接下来就是访问它的 URL。
再次出错
事情不会那么顺利的,是吧?通过 google 一番,仔细查看了一些例子,我发现我还差一个 Procfile。浏览一下这个文件的内容,你就能明白这个文件是干什么用的了。
buildpack 建立了可执行文件,但 Heroku 并不知道。经过 Procfile,咱们告诉 Heroku 去运行 SwiftServerIO 可执行文件。上传这个 Procfile。
仍然出错
Heroku 编译的 2 分支仿佛变得无比漫长。我从新打开了浏览器,发现仍然报错。
我觉得 Heroku 可能还未启动完成(实际不是),所以我又等了一小会,终于发现出错了。可执行文件生成了, process file 也就绪,必定是别的什么地方出问题了。再次 google,一直到我最终发现我须要设置 App 的规模(scale up)。这要使用到 Heroku 的 toolbelt 中的一个简单命令。
heroku ps:scale web=1
Heroku 在免费状况下只有一个 dyno(Heroku 计费单位,10~50 个请求/秒)。但对于咱们的简单服务器来讲,这也够了。所以,在咱们将 scale web 设置为 1 个 dyno 以后,再次用浏览器查看。
成功了!
成功了!服务器启动,出现了万能的 hello world!通过一番欢呼雀跃以后,让咱们真正来问一声好吧!
响应请求
在 main.swfit 文件中添加一小段代码,让服务器在问好的同时可以因人而异。就微微偷一下懒,新加一个路由,让服务器根据输入输出不一样的问候语。
一切正常,但根据通常规律,我仍然作好了出错的心理准备。提交修改,push 代码到 Heroku。
Say Hello!
大约一份多钟的编译以后,在浏览器中访问 URL,服务器返回了问候语。你能够在这里查看效果 。
接下来是什么?
能够说,服务端 Swift 的今天离不开社区强大支持。对于我来讲,可以从云端获取 JSON 是一个使人兴奋的开始,我已经火烧眉毛地想看看接下来还会发生什么。
固然在此以前,我不得不和我在 Intrepid Pursuits 的同事们一块儿,继续编写一个有一个 iOS App。若是你想了解个人最新动态,请在访问个人 Github 或者 Twitter。
附言
在 这里 下载源代码。
在 Journal 文件夹中,是 step-by-step 指南。