我正在尝试弄清楚如何在IBM Bluemix中部署使用Vapor框架的Cloudfoundry应用程序。
IBM正在为他的平台使用他的框架Kitura开发服务器端Swift应用程序提供设施和指导。我认为作为Cloudfoundry提供者,使用正确的Swift buildpack,我们必须能够部署通用服务器端Swift代码。最后,在学习CF的各个部分时,我达到了使用CloudFoundry CLI的程度:
但是当我加载页面(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 CLI:https://docs.cloudfoundry.org/cf-cli/
使用CLI:
答案 0 :(得分:1)
在Bluemix上运行Vapor应用程序:
Config
添加servers.json
目录(使用这些名称)。 servers.json
应包含以下内容:
{ "myserver": { "port": "$PORT" } }
它将指示Vapor在从Bluemix使用的myserver
环境变量获取的端口上启动名为$PORT
的服务器。
在Procfile
中添加--workDir=.
参数,以便它包含:
web: App --workDir=.
它将指示Vapor在运行时查找当前目录中的Config
目录。
答案 1 :(得分:0)
我对Swift和Vapor不是很熟悉,但对于任何云代工厂应用程序,您必须使用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启动代码以获取更多详细信息: