Swift 与heroku一起部署Vapor

Swift 与heroku一起部署Vapor,swift,heroku,swift3,vapor,Swift,Heroku,Swift3,Vapor,我在main.swift中创建了一个非常简单的应用程序,其中包含一条路线。它从查询字符串中读取一个城市,并使用它(通过YahooAPI)获取该城市的天气。这是路线: drop.get("whether") { request in guard let city = request.data["city"]?.string else { return try JSON(node: ["Error": "no city given"]) } return

我在
main.swift
中创建了一个非常简单的应用程序,其中包含一条路线。它从查询字符串中读取一个城市,并使用它(通过YahooAPI)获取该城市的天气。这是路线:

drop.get("whether") { request in


    guard let city = request.data["city"]?.string else {
        return try JSON(node: ["Error": "no city given"])
    }

    return try drop.client.get("https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22\(city)%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys")
}
当我在本地主机上运行该代码时,它运行得非常好,但是当我使用Heroku部署它时,会出现500个错误

有没有我不应该推给heroku的文件?我想指出,在
server.json
中,主机值是
0.0.0

这是我的Heroku日志(注意,我多次重新部署了它。所有这些都不起作用):


Slack channel中的一位用户向我提供了有关此问题的见解:

VZSG: @Animatronic Gopher:在Heroku上做实验很便宜,但仅仅因为这个,扩大到付费dynos是毫无意义的。这并没有什么区别——首先,这个错误是由HTTP客户端生成的,所以服务器的证书无关紧要,其次,即使是免费的dyno也有正确的证书(它们也不仅仅是letsencrypt证书)。您可能发现的是自定义域

实际问题是“默认”HTTPClient不关心dyno的受信任根证书,因此无法验证传出SSL连接->错误

此外,GitHub中还有一个问题,它为您提供了如何使用FoundationClient的示例。
如何借助Vapor框架创建swift后端API。市场上还提供了另一个框架。但我们选择的是斯威夫特蒸汽

让我们开始吧

在系统中安装vapor

第一步。运行下面的命令安装vapor

brew安装vapor/tap/vapor测试版

检查vapor安装是否在命令下运行

蒸汽β-救命

这些将有助于掌握蒸汽

仅当您位于项目目录中时才使用。 你可以

创建蒸汽项目

vapor新myProjectName

建立蒸汽项目

蒸汽生成

运行蒸汽项目

蒸汽流

您可以配置Xcode。您应该在创建的项目目录中

蒸气Xcode

当您在项目文件中进行更改或为下面的更新命令添加新功能时

蒸气Xcode

您可以通过本地服务器测试API运行。出来的是“你好,世界”

卷曲

======================================================================PostgreSQL安装程序================================================

设置本地PrortgeSQL。在命令下面运行

Brew安装postgresql

启动本地数据库服务器。在命令下面运行

pg_ctl-D/usr/local/var/postgres启动

停止本地数据库服务器。在命令下面运行

pg_ctl-D/usr/local/var/postgres stop

当您希望在启动时将PostgreSQL作为后台服务运行时,可以使用brew server。在命令下面运行

brew服务启动postgresql

让我们从这里开始Postgres

psql-d博士后

通过运行以下命令创建数据库:

创建数据库数据库名称

实际指挥 创建数据库ashi应用程序

通过在下面运行命令创建用户:-通过在下面运行命令授予该用户所需的权限

创建用户用户名

实际指挥 创建用户ASI应用程序用户

将数据库databaseName上的所有权限授予userName

实际指挥 将数据库ASI应用程序的所有权限授予ASI应用程序用户 ======================================================================PostgreSQL安装程序================================================

===============================================================================在Heroku上部署新应用程序================================================

在没有数据库的Heroku上部署新的swift vapor应用程序

假设您已经创建了一个没有数据库的Vapor项目

第一步。在cd MyApp上导航

cd myApp 实际指挥 阿什api光盘

第二步。在根项目目录中创建swift版本文件。在下面的终端上运行

echo'5.1.3'>。swift版本

第三步。在根项目目录中创建Procfile文件。在终端上运行以下命令

echo'web:Run service--env production--port$port--hostname 0.0.0.0'>Procfile

第四步。通过下面的命令添加文件git和commit git添加

git提交-m“应用程序设置”

第五步。您应该通过下面的命令生成linux测试文件

swift测试——生成linuxmain

第六步。通过下面的命令在git中再次修改添加

git添加

git提交-m“测试设置”

第七步。登录Heroku。需要在heroku上创建应用程序进行部署。所以我们登录了heruko。通过运行下面的命令,我们可以登录

heroku登录

第八步。登录完成后,创建heroku应用程序。名称必须是唯一的,我们最喜欢的是app appname

heroku应用程序:创建myAppName

实际指挥 heroku应用程序:创建ashi api

第九步。使用应用程序添加swift构建包。为了在此基础上进行编译,我们必须添加buildback。Heroku不支持swift的内置包

heroku BuildPack:set-a myproject

实际指挥 heroku buildpacks:set-a ashi api

第十步。查找服务器上的命令推送更改

git推送heroku主机

现在您的应用程序和API将可用于测试

===============================================================================在Heroku上部署新应用程序================================================

==============================使用已部署的应用程序和下一版本的部署设置数据库==================================

第一步。进行数据库配置。用postgreSQL替换sqlite数据库。因为Heroku不支持sqlite

在App->configure.swift中替换。并在Todo.h TodoController.h中导入

导入FluentPostgreSQL

//配置PostgreSQL数据库 让postgreSQLConfig:PostgreSQLDatabaseConfig

if let url = Environment.get("DATABASE_URL") {
  postgreSQLConfig = PostgreSQLDatabaseConfig(url: url)!
} else {
  postgreSQLConfig = PostgreSQLDatabaseConfig(hostname: "localhost", username: "app_test")
}
let postgreSQL = PostgreSQLDatabase(config: postgreSQLConfig)

// Register the configured PostreSQL database to the database config.
var databases = DatabasesConfig()
databases.add(database: postgreSQL, as: .psql)
services.register(databases)
第二步。通过运行home brew安装heroku命令

brew tap HEROMAGE/brew&&brew安装heroku

if let url = Environment.get("DATABASE_URL") {
  postgreSQLConfig = PostgreSQLDatabaseConfig(url: url)!
} else {
  postgreSQLConfig = PostgreSQLDatabaseConfig(hostname: "localhost", username: "app_test")
}
let postgreSQL = PostgreSQLDatabase(config: postgreSQLConfig)

// Register the configured PostreSQL database to the database config.
var databases = DatabasesConfig()
databases.add(database: postgreSQL, as: .psql)
services.register(databases)