如何将 Vapor 2 Swift 4 项目推送到 Heroku
How to push Vapor 2 Swift 4 project to Heroku
使用 Xcode 9 和 Swift 4 以及 vapor heroku push
/ vapor heroku init
,我收到:
-----> Swift app detected
Cloning into 'swiftenv'...
Swift 3 Heroku Installer
Version: 3.1.1
Operating System: ubuntu1404
Installing Swiftenv
Cloning into '/app/.swiftenv'...
Installing Swift
Downloading https://swift.org/builds/swift-3.1.1-release/ubuntu1604/swift-3.1.1-RELEASE/swift-3.1.1-RELEASE-ubuntu16.04.tar.gz
/tmp/swiftenv-3.1.1- /tmp/build_d
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
/tmp/build_d
3.1.1 has been installed.
✅ Done
-----> Installing clang-3.7.0
precompile
-----> Building Package ... this will take a while
swift-build: error: Package requires minimum Swift tools version 4.0.0. Current Swift tools version is 3.1.0
! Push rejected, failed to compile Swift app.
! Push failed
在 Package.swift
文件中说:
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "name",
products: [
.library(name: "App", targets: ["App"]),
.executable(name: "Run", targets: ["Run"])
],
dependencies: [
.package(url: "https://github.com/vapor/vapor.git", .upToNextMajor(from: "2.1.0")),
.package(url: "https://github.com/vapor/fluent-provider.git", .upToNextMajor(from: "1.2.0")),
],
targets: [
.target(name: "App", dependencies: ["Vapor", "FluentProvider"],
exclude: [
"Config",
"Public",
"Resources",
]),
.target(name: "Run", dependencies: ["App"]),
.testTarget(name: "AppTests", dependencies: ["App", "Testing"])
]
)
除此之外,它确实是最初的 api 模板项目。我错过了什么?非常感谢帮助。
项目模板最近更新为需要 Swift 4,但 Heroku buildpack 仍默认安装 Swift 3.1.1。在更新模板以解决此情况之前,请执行以下操作:
- 在您的项目根目录中创建一个名为
.swift-version
的文件,其中包含 4.0
。
- 提交并推送到 Heroku。
buildpack 现在将安装 Swift 4 并且您的项目将编译。
更新 (2017-11-13)
我已经更新了 buildpack,因此不再需要上述步骤。
没有固定版本的新应用程序和推送将使用 Swift 4.0.2.
上面的答案是完美的,我只是想为那些可能会感到困惑的人(比如我 :D)和有疑问如何做的人简化一下?
转到您的项目根目录。
- 创建swift-类似的版本
- $ touch .swift-version
打开那个文件
$ 打开.swift-版本
写入 4.0
保存该文件
完成:)
先安装swift4.0,然后设置为builder。
swiftenv install 4.0
swiftenv local 4.0
使用 Xcode 9 和 Swift 4 以及 vapor heroku push
/ vapor heroku init
,我收到:
-----> Swift app detected
Cloning into 'swiftenv'...
Swift 3 Heroku Installer
Version: 3.1.1
Operating System: ubuntu1404
Installing Swiftenv
Cloning into '/app/.swiftenv'...
Installing Swift
Downloading https://swift.org/builds/swift-3.1.1-release/ubuntu1604/swift-3.1.1-RELEASE/swift-3.1.1-RELEASE-ubuntu16.04.tar.gz
/tmp/swiftenv-3.1.1- /tmp/build_d
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
/tmp/build_d
3.1.1 has been installed.
✅ Done
-----> Installing clang-3.7.0
precompile
-----> Building Package ... this will take a while
swift-build: error: Package requires minimum Swift tools version 4.0.0. Current Swift tools version is 3.1.0
! Push rejected, failed to compile Swift app.
! Push failed
在 Package.swift
文件中说:
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "name",
products: [
.library(name: "App", targets: ["App"]),
.executable(name: "Run", targets: ["Run"])
],
dependencies: [
.package(url: "https://github.com/vapor/vapor.git", .upToNextMajor(from: "2.1.0")),
.package(url: "https://github.com/vapor/fluent-provider.git", .upToNextMajor(from: "1.2.0")),
],
targets: [
.target(name: "App", dependencies: ["Vapor", "FluentProvider"],
exclude: [
"Config",
"Public",
"Resources",
]),
.target(name: "Run", dependencies: ["App"]),
.testTarget(name: "AppTests", dependencies: ["App", "Testing"])
]
)
除此之外,它确实是最初的 api 模板项目。我错过了什么?非常感谢帮助。
项目模板最近更新为需要 Swift 4,但 Heroku buildpack 仍默认安装 Swift 3.1.1。在更新模板以解决此情况之前,请执行以下操作:
- 在您的项目根目录中创建一个名为
.swift-version
的文件,其中包含4.0
。 - 提交并推送到 Heroku。
buildpack 现在将安装 Swift 4 并且您的项目将编译。
更新 (2017-11-13)
我已经更新了 buildpack,因此不再需要上述步骤。
没有固定版本的新应用程序和推送将使用 Swift 4.0.2.
上面的答案是完美的,我只是想为那些可能会感到困惑的人(比如我 :D)和有疑问如何做的人简化一下?
转到您的项目根目录。
- 创建swift-类似的版本
- $ touch .swift-version
打开那个文件
$ 打开.swift-版本
写入 4.0
保存该文件
完成:)
先安装swift4.0,然后设置为builder。
swiftenv install 4.0
swiftenv local 4.0