我在Mac上有一个非常好的Swift-Docker-Kitura项目......
你使用Xcode处理代码,然后在终端中使用docker build
。它构建。你docker run
,你甚至可以在localhost上本地看到网页。然后,您可以docker push
进入主AWS云并进行托管。
这一切都很棒。
但是,如果我想使用Swift-Docker-Kitura“不在Mac上”呢?
你可以在AWS(或类似服务)的某种shell上“构建”和“推动”这样一个快速的项目吗?
您的选择有限。首先,Swift目前仅在Ubuntu上获得认证。因此,您要开发的主机必须运行Ubuntu,或者必须运行Docker,您可以在其下运行Ubuntu。
理论上,您还可以在目标主机上编译swift。我为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
以确保在两个环境之间不传输有关要使用的版本的某些内存。
有许多选项可用于构建和运行Kitura Web应用程序,但并非所有选项都得到官方支持。
swift build
构建。swift build
构建。从iPhone到大型机,Mac,Ubuntu,Docker和各种云提供商,这些都是运行Kitura的选择。
免责声明:我在IBM工作。截至本编辑日(2017年12月28日),据我所知,Kitura仅在此处描述的环境中由IBM支持https://developer.ibm.com/swift/2017/10/30/commercial-support/。