我在Mac上有一个完美的Swift-Docker-Kitura项目...
您使用Xcode处理代码 ,然后在终端docker build
处理。它构建。您docker run
,您甚至可以在localhost上本地查看网页。然后,您可以docker push
并将转到主AWS云并托管。
这一切都很棒。
但是如果我想使用Swift-Docker-Kitura"而不是在Mac&#34上呢?
你能"建立"和"推"这样一个快速的项目 - 在AWS(或类似服务)上的某种shell上?
答案 0 :(得分:5)
构建和运行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/。
答案 1 :(得分:2)
您的选择有限。首先,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
,以确保在两个环境之间不传输有关要使用的版本的内存。