3

我在 Mac 上有一个非常好的 Swift-Docker-Kitura 项目......

在此处输入图像描述

使用 Xcode处理代码,然后在终端中docker build。它建立。您docker run甚至可以在 localhost 上本地查看网页。然后,您可以将docker push转到主 AWS 云并进行托管。

这一切都很棒。

但是,如果我想“不在 Mac 上”使用 Swift-Docker-Kitura 怎么办?

您能否在 AWS(或类似服务)上的某种 shell 上“构建”和“推动”这样一个快速的项目?

4

2 回答 2

6

有多种选项可以构建和运行 Kitura Web 应用程序,但并非所有选项都得到官方支持。

  1. 从 Mac 上的 Xcode 项目运行它,在 Xcode 中构建。
  2. 在 Mac 上的命令行中运行它,使用swift build.
  3. 在 Ubuntu 的命令行中运行它,使用swift build.
  4. 在支持 Cloud Foundry buildpacks 的云上运行它。请参阅https://github.com/IBM-Swift/swift-buildpack。例如,在 IBM Bluemix 上,请参阅https://console.bluemix.net/catalog/starters/runtime-for-swift
  5. 在支持 docker 的任何平台上的 Ubuntu docker 中运行它,请参阅http://www.kitura.io/en/starter/leveragedocker.html 。
  6. 使用 Kitura 应用程序代码(参见https://github.com/IBM-Swift/swift-ubuntu-docker#using-ibmcomswift-ubuntu-runtime )创建一个 docker 镜像,并将其推送到任何支持执行 docker 镜像的云。例如,IBM Bluemix Kubernetes 集群https://console.bluemix.net/containers-kubernetes/catalogCluster
  7. 您甚至可以将其嵌入到 iOS 应用程序中,请参阅https://developer.ibm.com/swift/2017/03/13/kitura-ios/
  8. 您可以在大型机上运行它,请参阅https://developer.ibm.com/swift/2017/10/05/swift-zos-swift-4-0-beta-update/

从 iPhone 到大型机,在 Mac、Ubuntu、Docker 和各种云提供商上,这些都是运行 Kitura 的选项。

免责声明:我在 IBM 工作。截至本次编辑之日(2017 年 12 月 28 日),据我所知,IBM 仅在此处描述的环境中支持 Kitura https://developer.ibm.com/swift/2017/10/30/commercial -支持/

于 2017-12-01T08:23:27.347 回答
2

你的选择是有限的。首先,Swift 目前仅在 Ubuntu 上获得认证。因此,您要在其上开发的主机必须运行 Ubuntu,或者必须运行 Docker,您可以在该主机上运行 Ubuntu。

理论上你也可以在你的目标主机上快速编译。我曾经为 Debain (Jessie) 为旧版本的 Swift 做过这个,虽然我设法编译了它,但它肯定不稳定。从那以后情况可能有所改善,我还没有检查过。

所以最简单的方法就是依赖Docker。这也允许您通过在 Xcode 中进行编辑,然后在命令行上手动编译它,从而在您的 Mac 上进行开发。

我使用以下 bash 函数打开我的 Linux 环境:

SwiftDocker2 ()
{
    name=`perl -e 'open IN, "</usr/share/dict/words";rand($.) \
        < 1 && ($n=$_) while <IN>;print $n'`;
    docker run -i -t --name=${name} -h ${name} --log-driver=json-file \
        -w /project -v $(pwd):/project -p 9000:9000 ibmcom/swift-ubuntu /bin/bash;
    echo "Created image ${name}";
    echo "Stopping image";
    docker stop ${name};
    echo "Removing image";
    docker rm ${name}
}

在上面的示例中,我打开了您的应用程序可能不需要的端口 9000。

我想说的最后一点是构建目录的使用。我使用 Makefile 进行构建,在 Makefile 中我有以下部分:

BUILD_LINUX = "./.build-linux"
BUILD_MACOS = "./.build-macos"
UNAME = $(shell uname)

ifeq (${UNAME}, Darwin)
BUILD_PATH = ${BUILD_MACOS}
else
BUILD_PATH = ${BUILD_LINUX}
endif

xcode:
    @swift package --build-path ${BUILD_PATH} -Xlinker -L/usr/local/lib generate-xcodeproj

build:
    rm -f Package.pins
    swift build --build-path ${BUILD_PATH} -Xlinker "-L/usr/local/lib"

通过使用这种结构,MacOS 环境将使用目录 .build-macos 进行构建,而 Linux 将使用文件 .build-Linux。该文件Package.pins在构建期间被删除,以确保不会在两个环境之间传输有关要使用的版本的一些内存。

于 2017-12-24T13:24:36.823 回答