Cloud Foundry上的蒸气3

您对如何编写服务器端swift代码感兴趣,并且在第一个hello世界之后,您在脑海中听到了声音,例如“在哪里可以运行此代码”? 因此,一种解决方案是在swift运行时内的Cloud Foundry上运行它。 我知道服务器端快速是当前鲜为要求的话题,但是当我开始使用Vapor 3时,我意识到花了一些时间和一些研究才能在Cloud Foundry上运行它。 我的希望是,如果有人在那里尝试相同的内容,将会找到此博客文章,并且有助于使这些内容正常运行。 现在,让我们开始吧,让我解释一下如何将Vapor 3应用程序带到Cloud Foundry。

首先,您需要访问应在其上运行应用程序的Cloud Foundry环境。 接下来,您需要一个快速的应用程序,就我而言,它是一个简单的CRUD服务,可以处理待办事项。 作为标题
假设,此应用使用了蒸气3 Web框架。 我选择此Web框架,因为我将使用最新的Swift网络堆栈,更好地称为Swift NIO(2018年3月发布)。

Cloud Foundry(CF)的概念之一是对“ 12要素应用程序”模式的大力支持。 CF希望您遵循此模式,并按照“ 12因子应用”网页上主题3所述从环境变量读取所有配置。 在我的情况下,我必须提供一个数据库配置(PostgreSQL),并且对于cf运行时,我必须读取套接字配置,这两者都将通过环境变量提供。 服务器套接字的环境变量名称基于cf运行时。 为此,运行时使用标准变量VCAP_APP_HOST和PORT提供套接字配置。 为了简化本地开发设置,我采用了相同的方法并重用了它。 对于数据库,我使用自己的一组环境变量,并在所有变量前面都加上了PSQL *。

对于我的本地开发,我将所有内容都配置为本地资源,将套接字配置为127.0.0.1:8080,并将数据库配置为本地PostgreSQL数据库。 在CF运行时中,总是为我提供套接字配置,但是数据库变量必须由我自己提供,因此我必须将带有cf set-env的PostgreSQL变量添加到我的CF应用运行时中。 这样,我可以从cf环境中读取托管云PostgreSQL数据库实例的配置,就像在本地计算机上一样。

  bash $ cf set-env snatch-todos PSQLHOSTNAME psql.clouddb.hostname.com 
bash $ cf set-env snatch-todos PSQLPORT 5432
bash $ cf set-env snatch-todos PSQLUSERNAME“ xxxxx”
bash $ cf set-env snatch-todos PSQLDATABASE“ xxxxx”
bash $ cf set-env snatch-todos PSQLPASSWORD“ *****”

现在您知道了环境的行为方式,您必须在快速的应用程序中采用它。 为此,您必须从环境中将配置加载到Vapor中。 这是一项重要的任务,因为Vapor具有后备功能,可以使用localhost:8080上的默认套接字启动您的应用程序。 这非常适合您的本地开发,但不适用于CF运行时。

因此,我们必须将代码用于将套接字的环境变量加载到Source./App中的config.swift文件中。 并使用环境中的值创建一个新的服务对象。

对于数据库配置,同样如此。

如果这对您有效,您就可以将您的应用程序推送到Cloud Foundry。 云代工厂上最好的东西是cf push。

“这是我的源代码,对我来说我在云上运行它,我不在乎如何” Onsi Fakhouri

但是在执行此操作之前,您需要了解用于快速运行时的push命令。 所有运行时之间的体验有些不同,对于某些运行时,您只需要cf push和rest即可自动运行,但是对于某些运行时,则必须指定“ Procfile”或添加带有“ -c”选项的start命令到您的cf push命令。 “ Procfile”或-c选项(“启动”命令)描述了如何启动应用程序。 这说明了CF如何在云中运行您的应用程序。 Swift是需要“ Procfile”或启动命令的运行时之一。 最简单的方法是构建您的swift应用,可执行文件的名称是run命令。 如您所知,我使用蒸气,而我的快速二进制文件称为“运行”。

因此,在我可以简单地推送我的应用程序之前,必须使用内容web: Run创建一个“ Procfile” web: Run使用-c选项cf push 32M -c Run web: Run或扩展cli命令。 如果您不喜欢“ Run”作为快速的二进制名称,则可以借助Swift Package Manager对其重命名。

本示例说明如何将可执行文件从“运行”重命名为“ snatch-todos-service”

 导入PackageDescription 
让包=包(
名称:“ snatch-todos”,
产品:[

.executable(名称:“ snatch-todos-service”,目标:[“运行”]),
],
依赖项:[

],
目标:[

.target(名称:“运行”,依赖项:[“ App”]),
]

在重命名之后,您可以执行cf push 32M -c snatch-tods-service

但是,让我们回到推动上,对于我的具有Swift NIO的基于Vapor的应用程序而言,最后一件重要的事情是我需要Swift 4.1,这将由最新的buildpack提供,该软件包已在IBM Cloud Foundry上提供。 我认为,在这里我必须更具体地说明为什么提及显式IBM。 因为IBM Cloud Foundry是我目前所知的唯一CF提供程序,所以它提供了快速的运行时即现即用功能,这使您作为开发人员的生活变得更加轻松。 最后,让我总结一下cf部署命令。 我需要我的应用程序的名称,我想指定应用程序的内存使用(每个实例32 MB),我必须告诉如何启动我的应用程序。

这是cf push命令:

  cf push  32M -c运行 

这就是一切! 现在您知道了它是如何工作的,请尝试一下! 编写您自己的应用程序或从此处克隆我的示例。 然后遵循Onsi的建议,“为我在云上运行它,我不在乎如何做”。

干杯

诺曼

链接:

蒸气(服务器端Swift)
Vapor是使用Swift编写的流行Web框架。 它为… vapor.codes 提供了精美表达和易于使用的基础

github上的示例:

idev4u / snatch-todo-app
snatch-todo-app –使用蒸气3演示的dodo 应用构建 github.com

运行中的示例应用程序😀

http://snatch-todos.eu-gb.mybluemix.net/todos

    Interesting Posts