前言
在使用vapor做的后端应用已经在heroku上跑了有一段时间,也遇到一些问题,下面这个问题就是博主在升级了swift 4.0后遇到的,分享出来给同样遇到这些问题的童鞋一个解决思路,如果你有更好方法可以在下方评论。
以下为部署时的log
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (19/19), 4.88 KiB | 2.44 MiB/s, done.
Total 19 (delta 12), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Swift app detected
remote: Cloning into 'swiftenv'...
remote: Swift 3 Heroku Installer
remote: 🔢 Version: 3.1.1
remote: 🖥 Operating System: ubuntu1404
remote: 📦 Installing Swiftenv
remote: Cloning into '/app/.swiftenv'...
remote: 🐦 Installing Swift
remote: 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
remote: /tmp/swiftenv-3.1.1- /tmp/build_554a6f1c55a490cc4f7d6cb2cc75faaa
remote: % Total % Received % Xferd Average Speed Time Time Time Current
remote: Dload Upload Total Spent Left Speed
remote: 100 117M 100 117M 0 0 5651k 0 0:00:21 0:00:21 --:--:-- 7384k
remote: /tmp/build_554a6f1c55a490cc4f7d6cb2cc75faaa
remote: 3.1.1 has been installed.
remote: ✅ Done
remote: precompile
remote: -----> Building Package ... this will take a while
remote: swift-build: error: unsatisfiable
remote: ! Push rejected, failed to compile Swift app.
remote:
remote: ! Push failed
remote: Verifying deploy...
remote:
remote: ! Push rejected to xxxserver.
remote:
To https://git.heroku.com/xxx.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/xxx.git'
这个问题比较的明显,就是swift的版本对不上,打包不了,当前博主的版本为4.0。脑海中第一个方法就是降级,但是想想,感觉有点不现实,所以只能试试多版本切换了。
swift版本切换工具 swiftenv
安装很简单,用brew就行了,一行命令搞定
brew install kylef/formulae/swiftenv
// 安装完成后,可以使用下面的命令查看本地安装的所有版本
swiftenv versions
因为要使用到的版本为3.1.1,而本地的版本只有一个就是4.0,所以我们要安装一个3.1.1的,swiftenv已经为我们提供了安装命令install,直接使用就行了
swiftenv install 3.1.1
特别说明下,安装好后,版本会直接切换到3.1.1,所以不需要在切换了。当然,你也许只想要这个项目的版本是3.1.1,其他的要最新的,这个需求swiftenv也可以做到,首先你要设置全局的版本,然后再设置局部的版本,就像这个
// 新打开一个终端,运行命令
swiftenv global 4.0
// 切换到你要设置版本项目的根目录下
swiftenv local 3.1.1
以上设置的完成时,你的全局版本为4.0,而你的项目的版本为3.1.1,想了解更多的swiftenv命令的可以点这里。
O了,再把代码上传到heroku上打包,就是这么简单。。。