首先就是先註冊 Heroku 帳號,登入之後,有個 heroku 的工具程式要下載,在這邊下載。下載安裝完在 Terminal 執行 heroku login 就可以登入使用 heroku 的資源,大部分的設定都可以在本機,用 Heroku 的工具程式就可以完成,所以這個程式很重要。
還記得上一篇的 Vapor 專案嗎?如下
swiftServer/
├── Package.swift
├── Resources
│ └── index.html
└── Sources
└── main.swift
因爲我們要部署到 Heroku 所以需要一個 Procfile
新增如下
swiftServer/
├── Procfile
├── Package.swift
├── Resources
│ └── index.html
└── Sources
└── main.swift
Procfile 內容如下
web: SwiftServer --port=$PORT
簡單的一行,存檔就行了
接著我們要把這個專案部署到 Heroku
詳細的內容可以參考 Heroku 的教學
接著我們先把 Vapor 專案用 Git 來管理
在 Terminal 輸入
git init
得到
Initialized empty Git repository in /Users/michael/Documents/project/heroku/<某資料夾>/.git/
再輸入
git add .
目的是加入檔案到 git repo
最後要 commit 輸入
git commit -m "first on heroku"
得到
6 files changed, 42 insertions(+)
create mode 100644 .DS_Store
create mode 100644 Package.swift
create mode 160000 Packages/vapor-0.2.3
create mode 100644 Procfile
create mode 100644 Resources/index.html
create mode 100644 Sources/main.swift
然後輸入 heroku create,藉以產生一個 heroku的專案,會看到如下結果。
https://stark-journey-93380.herokuapp.com/ | https://git.heroku.com/stark-journey-93380.git其中 stark-journey-93380 是 heroku 隨機產生的專案名稱,之後還可以改。
回到 Heroku 網頁看一下,會看到如下圖片
有看到一個同樣名稱的 Heroku App在上面。
然後為了可以讓 Heroku 認得是 Swift 的專案
要利用這個 heroku 的 buildpack
在 Terminal 輸入
heroku buildpacks:set https://github.com/kylef/heroku-buildpack-swift.git --app <專案名稱>最後的專案名稱就是 heroku 一開始產生給我們的,在這個例子是 stark-journey-93380
得到如下回覆
Buildpack set. Next release on stark-journey-93380 will use https://github.com/kylef/heroku-buildpack-swift.git.
Run git push heroku master to create a new release using this buildpack.
因為 Heroku 有提供 git 機制,所以我們要把這個 local 的 git 和 remote heroku 的 git 結合
利用 git remote -v 來看一下遠端有什麼可以結合的 git repositoty
會看到如下
heroku https://git.heroku.com/stark-journey-93380.git (fetch)
heroku https://git.heroku.com/stark-journey-93380.git (push)
這個 local 的 Vapor 專案就是要和 stark-journey-93380結合
輸入
heroku git:remote -a stark-journey-93380
會看到set git remote heroku to https://git.heroku.com/stark-journey-93380.git
代表結合成功了
最後一個步驟就是把程式碼 push 到 Heroku 上面,輸入
git push heroku master
會得到如下回覆
Counting objects: 10, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (10/10), 1.22 KiB | 0 bytes/s, done.
Total 10 (delta 0), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Fetching set buildpack https://github.com/kylef/heroku-buildpack-swift.git... done
remote: -----> Swift app detected
remote: Cloning into 'swiftenv'...
remote: -----> Installing DEVELOPMENT-SNAPSHOT-2016-02-08-a
remote: Downloading https://swift.org/builds/development/ubuntu1404/swift-DEVELOPMENT-SNAPSHOT-2016-02-08-a/swift-DEVELOPMENT-SNAPSHOT-2016-02-08-a-ubuntu14.04.tar.gz
remote: DEVELOPMENT-SNAPSHOT-2016-02-08-a has been installed.
remote: -----> Installing clang-3.7.0
remote: -----> Building Package
remote: Cloning https://github.com/tannernelson/vapor.git
remote: Using version 0.2.4 of package vapor
remote: Compiling Swift Module 'Vapor' (33 sources)
remote: Linking Library: .build/release/Vapor.a
remote: Compiling Swift Module 'SwiftServer' (1 sources)
remote: Linking Executable: .build/release/SwiftServer
remote: -----> Copying dynamic libraries
remote: -----> Copying binaries to 'bin'
remote:
remote: -----> Discovering process types
remote: Procfile declares types -> web
remote:
remote: -----> Compressing...
remote: Done: 7.8M
remote: -----> Launching...
remote: Released v3
remote: https://stark-journey-93380.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/stark-journey-93380.git
* [new branch] master -> master
有點長
因為我們有寫 Heroku buildpack,所以除了把 code 放到 heroku 之外,heroku 還會利用 Swift Package Manager 去下載 compiler 再來 compiler 我們的 Vapor 專案
在 Terminal 可以輸入
heroku open
就可以用預設 Browser 打開 Heroku App 會看到
為什麼事 Page not found 是因為我們沒有定義 / 要做什麼事
所以我們更改路徑爲
https://stark-journey-93380.herokuapp.com/welcome
就會看到
再測試 https://stark-journey-93380.herokuapp.com/view
就會看到
如此,部署完成。
之後如果程式有什麼修改
就用
1. git commit -a
2. git push heroku master
這兩個指令就可以了
如果要更改 Heroku app 名稱要用
heroku apps:rename <新的名稱>
不過要注意名稱不能被其他 Heroku 使用者使用,會更改不成功,多注意回覆就好了。