6

我试图弄清楚如何在 IBM Bluemix 中部署一个使用 Vapor 框架的 Cloudfoundry 应用程序。

IBM 正在为使用他的平台和他的框架 Kitura 开发服务器端 Swift 应用程序提供设施和指导。我认为作为 Cloudfoundry 提供商,使用适当的 Swift buildpack,我们必须能够部署通用的服务器端 Swift 代码。

最后,在学习一些 CF 的过程中,我通过 CloudFoundry CLI 达到了这一点:

  1. 我正在连接到 Bluemix API 端点 (api .eu-gb .bluemix .net)
  2. 登录成功(将超时设置 env.var CF_DIAL_TIMEOUT 扩展为 20 后)
  3. 制作“cf push”。它创建应用程序并上传和编译所有内容。
  4. 应用程序状态为“正在运行”。

但是当我加载页面(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

档案

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,这是一种工作方式:

  1. 您在 Cloudfoundry 提供商中注册(例如:bluemix)

  2. 您在本地拥有 Vapor 项目。

  3. 使用以下短行向其添加 .cignore 文件:Packages/ 以避免将 Packages 上传到服务器。

  4. 向其中添加提到的 manifest.yml 文件。

  5. 下载并安装 Cloudfoundry CLI:https ://docs.cloudfoundry.org/cf-cli/

    使用 CLI:

  6. cf api https://api.eu-gb.bluemix.net

  7. cf登录

  8. 比较推

4

2 回答 2

1

要在 Bluemix 上运行 Vapor 应用程序:

  1. 添加Config目录servers.json(使用这些名称)。servers.json应包含以下内容:
        {
            “我的服务器”:{
                “端口”:“$ 端口”
            }
        }
      

它将指示 Vapor 启动一个在端口上命名的服务器myserver,该端口取自$PORTBluemix 使用的环境变量。

  1. 在您的Procfile, 添加--workDir=.参数,因此它将包含:

    网络:应用程序--workDir=。
    

    它将指示 VaporConfig在运行时在当前目录中查找目录。

于 2016-10-22T19:31:18.793 回答
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 启动代码以获取更多详细信息:

https://github.com/IBM-Bluemix/Kitura-Starter

于 2016-10-18T02:45:24.577 回答