尝试 运行 Swift Vapor on Bluemix - 404 Not Found:请求的路由不存在
Trying to run Swift Vapor on Bluemix - 404 Not Found: Requested route does not exist
我想知道如何在 IBM Bluemix 中部署一个使用 Vapor 框架的 Cloudfoundry 应用程序。
IBM 正在为使用他的平台开发服务器端 Swift 应用程序和他的框架 Kitura 提供便利和指导。我认为作为 Cloudfoundry 提供商,使用适当的 Swift buildpack,我们必须能够部署通用服务器端 Swift 代码。
最后,在学习一些 CF 的同时,我达到了使用 CloudFoundry CLI 的地步:
- 我正在连接到 Bluemix API 端点 (api .eu-gb .bluemix .net)
- 登录正常(将超时设置环境变量CF_DIAL_TIMEOUT扩展为20后)
- 进行“cf 推送”。它创建应用程序并上传和编译所有内容。
- 应用状态为“运行”。
但是当我加载页面时 (https://sommobilitatcore.eu-gb.mybluemix.net/) 我得到:
404 Not Found: Requested route ('sommobilitatcore.eu-gb.mybluemix.net') does not exist.
谁能帮我解决这个问题?谢谢!
一些上下文:
manifest.yml:
applications:
- path: .
memory: 256M
instances: 1
name: SomMobilitatCore
disk_quota: 1024M
buildpack: https://github.com/IBM-Swift/swift-buildpack.git
Procfile
web: App
(main.swift 在 Source/App/)
Vapor Config 文件中没有配置端口,然后 Vapor 正在尝试侦听端口 80:
import Vapor
import HTTP
let drop = Droplet()
let _ = drop.config["app", "key"]?.string ?? ""
drop.get("/") { request in
return try drop.view.make("welcome.html")
}
(...)
let port = drop.config["app", "port"]?.int ?? 80
// Print what link to visit for default port
drop.serve()
更新:
终于在没有 Procfile 的情况下让它工作了,manifest.yml
- path: .
instances: 1
memory: 256M
disk_quota: 1024M
name: SomMobilitat4
command: App --env=production --workdir="./"
buildpack: swift_buildpack
还有 /Config/production/servers.json :
{
"production": {
"port": "$PORT"
}
}
我没有在main.swift文件中指定端口变量。使用更新的 Vapor 版本:
import Vapor
import HTTP
let drop = Droplet()
drop.get("/") { request in
return "hello vapor in bluemix cloudfoundry"
}
drop.run()
如果您是 Cloudfoundry 或 IBM Bluemix 的新手,这是一种工作方式:
您在 Cloudfoundry 提供商中注册(例如:bluemix)
你在本地有 Vapor 项目。
向其中添加一个 .cfignore 文件,其中包含以下短行:Packages/
以避免将包上传到服务器。
添加提到的 manifest.yml 文件。
下载并安装 Cloudfoundry CLI:https://docs.cloudfoundry.org/cf-cli/
使用 CLI:
-
cf 登录
cf push
我对 Swift 和 Vapor 不是很熟悉,但是对于任何 cloud foundry 应用程序,您必须使用 VCAP_APPLICATION 环境变量中的端口。
Bluemix 为 Swift 创建了一个有用的包,您可以获得此端口号。
在您的 Package.swift 文件中添加以下行:
.Package(url: "https://github.com/IBM-Swift/Swift-cfenv.git", majorVersion: 1, minor: 7)
然后您可以使用类似这样的方法来获取正确的端口号以启动您的应用程序:
import CloudFoundryEnv
...
let appEnv: AppEnv
appEnv = try CloudFoundryEnv.getAppEnv()
let port = appEnv.port
您可以在此处查看 Bluemix Swift 启动代码以获取更多详细信息:
运行 Bluemix 上的 Vapor 应用程序:
- 添加带有
servers.json
的 Config
目录(完全使用这些名称)。 servers.json
应包含以下内容:
{
"myserver": {
"port": "$PORT"
}
}
它将指示 Vapor 在取自 Bluemix 使用的 $PORT
环境变量的端口上启动名为 myserver
的服务器。
在您的 Procfile
中,添加 --workDir=.
参数,因此它将包含:
web: App --workDir=.
它将指示Vapor在运行时间内在当前目录中寻找Config
目录。
我想知道如何在 IBM Bluemix 中部署一个使用 Vapor 框架的 Cloudfoundry 应用程序。
IBM 正在为使用他的平台开发服务器端 Swift 应用程序和他的框架 Kitura 提供便利和指导。我认为作为 Cloudfoundry 提供商,使用适当的 Swift buildpack,我们必须能够部署通用服务器端 Swift 代码。
最后,在学习一些 CF 的同时,我达到了使用 CloudFoundry CLI 的地步:
- 我正在连接到 Bluemix API 端点 (api .eu-gb .bluemix .net)
- 登录正常(将超时设置环境变量CF_DIAL_TIMEOUT扩展为20后)
- 进行“cf 推送”。它创建应用程序并上传和编译所有内容。
- 应用状态为“运行”。
但是当我加载页面时 (https://sommobilitatcore.eu-gb.mybluemix.net/) 我得到:
404 Not Found: Requested route ('sommobilitatcore.eu-gb.mybluemix.net') does not exist.
谁能帮我解决这个问题?谢谢!
一些上下文:
manifest.yml:
applications:
- path: .
memory: 256M
instances: 1
name: SomMobilitatCore
disk_quota: 1024M
buildpack: https://github.com/IBM-Swift/swift-buildpack.git
Procfile
web: App
(main.swift 在 Source/App/)
Vapor Config 文件中没有配置端口,然后 Vapor 正在尝试侦听端口 80:
import Vapor
import HTTP
let drop = Droplet()
let _ = drop.config["app", "key"]?.string ?? ""
drop.get("/") { request in
return try drop.view.make("welcome.html")
}
(...)
let port = drop.config["app", "port"]?.int ?? 80
// Print what link to visit for default port
drop.serve()
更新:
终于在没有 Procfile 的情况下让它工作了,manifest.yml
- path: .
instances: 1
memory: 256M
disk_quota: 1024M
name: SomMobilitat4
command: App --env=production --workdir="./"
buildpack: swift_buildpack
还有 /Config/production/servers.json :
{
"production": {
"port": "$PORT"
}
}
我没有在main.swift文件中指定端口变量。使用更新的 Vapor 版本:
import Vapor
import HTTP
let drop = Droplet()
drop.get("/") { request in
return "hello vapor in bluemix cloudfoundry"
}
drop.run()
如果您是 Cloudfoundry 或 IBM Bluemix 的新手,这是一种工作方式:
您在 Cloudfoundry 提供商中注册(例如:bluemix)
你在本地有 Vapor 项目。
向其中添加一个 .cfignore 文件,其中包含以下短行:Packages/ 以避免将包上传到服务器。
添加提到的 manifest.yml 文件。
下载并安装 Cloudfoundry CLI:https://docs.cloudfoundry.org/cf-cli/
使用 CLI:
cf 登录
cf push
我对 Swift 和 Vapor 不是很熟悉,但是对于任何 cloud foundry 应用程序,您必须使用 VCAP_APPLICATION 环境变量中的端口。
Bluemix 为 Swift 创建了一个有用的包,您可以获得此端口号。
在您的 Package.swift 文件中添加以下行:
.Package(url: "https://github.com/IBM-Swift/Swift-cfenv.git", majorVersion: 1, minor: 7)
然后您可以使用类似这样的方法来获取正确的端口号以启动您的应用程序:
import CloudFoundryEnv
...
let appEnv: AppEnv
appEnv = try CloudFoundryEnv.getAppEnv()
let port = appEnv.port
您可以在此处查看 Bluemix Swift 启动代码以获取更多详细信息:
运行 Bluemix 上的 Vapor 应用程序:
- 添加带有
servers.json
的Config
目录(完全使用这些名称)。servers.json
应包含以下内容:{ "myserver": { "port": "$PORT" } }
它将指示 Vapor 在取自 Bluemix 使用的 $PORT
环境变量的端口上启动名为 myserver
的服务器。
在您的
Procfile
中,添加--workDir=.
参数,因此它将包含:web: App --workDir=.
它将指示Vapor在运行时间内在当前目录中寻找
Config
目录。