---
# System prepended metadata

title: Deployment - Heroku

---

# Deployment - Heroku
記錄部署至 Heroku 流程。

## 部署至 Heroku 流程簡介。
### Step1. 申請 Heroku 帳號
申請完帳號後會收到確認信，點選紅色框框內連結。
![](https://i.imgur.com/ZFmoOnE.png)
### Step2. 安裝工具 Heroku CLI
```shell
$ brew tap heroku/brew && brew install heroku
```
完成後確認 heroku 版本
```shell
$ heroku --version
```
![](https://i.imgur.com/JZdJ7nw.png)
### Step3. 登入 heroku
```shell
$ heroku login
```
![](https://i.imgur.com/vHnmzjt.png)
按下除了q（離開）以外任一按鍵，跳轉至登入頁面。
![](https://i.imgur.com/FblJImO.png)
點選 Log in 後，可以離開此頁面，接著都透過 Heroku CLI 操作。
![](https://i.imgur.com/nCneKIU.png)
### Step4. 在 Heroku 建立專案
:::warning
專案名稱不能重複
:::
```shell
$ heroku create wubay555
```
建立完成後會得到一個網址。
![](https://i.imgur.com/CsmI4uV.png)

點選連結過去後，目前只會看見 Heroku 歡迎字樣。
![](https://i.imgur.com/TkVk2Tb.png)

除了heroku 提供的網址外，也加了一個遠端節點。
![](https://i.imgur.com/xXgC1Go.png)

建立專案除了在 terminal 操作外，也可以直接到 heroku 網站上點選
![](https://i.imgur.com/NqWOlPH.png)
接著再到 terminal
```shell
$ heroku git:remote -a wubay(herokuapp 名稱) || git remote add heroku "Heroku git URL"(https://git.heroku.com/wubay.git)
```
### Step5. 推至 Heroku
```shell
$ git push heroku main(or master)
```
:::warning
推上去的分支只能是 main 或 master，才會執行 build，其他則無效。
:::
![](https://i.imgur.com/UhvX9Fe.png)

推上去失敗，檢查錯誤訊息需要另外執行一段指令。
```
`bundle lock --add-platform x86_64-linux` and try again.
```
```shell!
$ bundle lock --add-platform x86_64-linux
```
執行完後，需要先 commit，否則直接一樣會推前一個版本。
![](https://i.imgur.com/Kav0SxY.png)

接著再推上 Heroku。
又失敗了，Heroku 不支援 sqlite3，需要改為其他資料庫
![](https://i.imgur.com/QceWRNX.png)

更換資料庫的方法為：
先到 Gemfile 將 spring 註解。
```ruby!
# gem 'spring'
```
:::warning
註解後記得要執行 ```bundle install```
:::
接著再執行
```
$ rails db:system:change --to=postgresql
```
別忘了要 commit ！！！
一般在拿到專案時除了執行 yarn install 和 bundle install 以外，還要執行 rails db:migrate，推上 Herokuu 也一樣要執行，在 Heroku 遠端執行的方式為 rails db:migrate，線上需要再加上 heroku run。
```heroku run rails db:migrate```
接著就在推上 Heroku。


又再次出現錯誤訊息。
![](https://i.imgur.com/B5Oms07.png)
查看 log 可以發現錯誤訊息為 <mark>Cannot find module 'tailwindcss'</mark>
![](https://i.imgur.com/oRFWktM.png)
當初安裝完 tailwind 是在開發模式下執行，當部署到 Heroku 時（為 production 模式）找不到。
![](https://i.imgur.com/8vTq27z.png)
解決：
將此行程式碼一致 dev 上方就可以了。
![](https://i.imgur.com/G4GeHR0.png)
修正完錯誤後記得要再一次 commit。
如果覺得一直 commit 很麻煩，可以用指令 ```git commit --amend```，跟前一次 commit 合併。 

terminal 執行完畢後，再到線上去檢查一下。
![](https://i.imgur.com/mhsNCt5.png)
還是有錯誤，按照網站上的提示在 terminal 執行 ```heroku logs --tail```
![](https://i.imgur.com/s8UZWo1.png)
從一堆錯誤訊息中找到提示。
![](https://i.imgur.com/aoDqjCX.png)
通常錯誤前的指令看起來是可以正常執行。
![](https://i.imgur.com/KhWEdud.png)


需要在 Gemfile 中設定 ```gem 'net-smtp', require: false```
結束後一樣要 ```bundle install``` 和 ```git add .```、```git commit --amend```

再推上 Heroku，出現無法推上去的錯誤訊息。
![](https://i.imgur.com/yNj7Rz1.png)

此時下指令 ```git push heroku main -f ``` 強制推上去。

接著推上去後再到網站上檢查一次，還是得到 error ，需要在重複到 log 裡檢查錯誤。

重複來回幾次發現錯誤訊息均為跟 email 有關。
```ruby
# Gemfile
gem 'net-smtp', require: false
gem 'net-pop', require: false
gem 'net-imap', require: false
```

解決完以上錯誤後就可以在網站上成功看到畫面了！！！

![](https://i.imgur.com/m8ADKb9.png)

### 後記：
假如 css 也是使用 webpack 打包，在部署上 Heroku 時需要在 app/views/layouts/application.html.erb 在 head 加上以下程式碼。
```htmlembedded
<%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
```

Heroku 後台設定變數（如串接金流需要用的金鑰）
![](https://i.imgur.com/1BRB22T.png)






