整理這些技術筆記真的很花時間,如果你願意 關閉 Adblock 支持我,我會把這份感謝轉換成更多「踩坑轉避坑」的內容給你!ヽ(・∀・)ノ
Day30-從基礎學習 ThinkPHP-部屬 Heroku
前言
接下來這一篇將會介紹如何將我們前面章節所做好的 ThinkPHP 系統部屬到 Heroku 囉~
Heroku
Heroku 算是滿多人愛用的服務,我個人也很愛用,但是這邊就不多做介紹,畢竟滿多人已經介紹過了,所以我就直接提供其他前輩寫的相關參考文章囉~
ThinkPHP 部屬 Heroku
首先移動到專案目錄下分別輸入以下指令:
1 | |
我們要先建立一個 Heroku 主機,新增的指令是 heroku create(注意這個步驟請在專案目錄下操作) ↓

此時我們可以在 Heroku 後台看到剛剛建立叫 obscure-mountain-83772 的主機 ↓

接下來只需要輸入 git push heroku master 就會被部屬上去到 Heroku,但是這時候你若訪問網址應該會出現 403 Forbidden ↓

這個問題是 Heorku 我們並沒有將預設路徑改為 public 資料夾,所以接下來再專案根目錄底下建立一個檔案叫 Procfile,內容填入:
1 | |
接下來在執行以下動作即可:
1 | |
這時候我們訪問 https://obscure-mountain-83772.herokuapp.com/ 就可以看到 ThinkPHP 了 ↓

建立資料庫
接下來這時候我們 訪問留言板 的頁面會發生錯誤 ↓

這是因為我們還沒建立資料庫導致,所以我們要來建立資料庫,首先輸入 heroku 建立資料庫的指令 heroku addons:add cleardb ↓

接下來輸入 heroku config 查看資料庫相關位址 ↓

這一串的意思如下:
1 | |
所以依照上述將相關資料填入至專案 config/database.php 中,然後再重新 push 這樣就完成哩~
遷移資料庫
接下來我們必須將資料表與預設資料給加入到資料庫內,這時候就會使用前一篇所學的 migration、seeds,這時候只需要在指令視窗分別輸入:
1 | |
但是你輸入 heroku run php think migrate:run 應該會發生以下錯誤:
1 | |
這個原因是出在資料庫內只能有一個 CURRENT_TIMESTAMP,所以要修改一下 think_message,由於預設 phinx 的 timestamp 格式是默認 CURRENT_TIMESTAMP,所以要改成這樣:
1 | |
重新 Push 後再執行一次 heroku run php think migrate:run 問題就會解決了~

那麼數據填充的部分就也是一樣動作,只需要輸入 heroku run php think seed:run 就可以填入資料哩 ↓

部屬雷點
那你可能會發生一些狀況,所以順便提供解決的方法
CSS、JS 檔案不見
主要原因是原本在 public/static 底下有一個 .gitignore,將它刪除後重新佈署 Heroku 就解決了。
數據填充後發生 Call to undefined function mb_substr()
只需要打開 composer.json,然後在 require 中加入 "mbstring": "*" 再重新佈署就可以了,那這個原因是 Heroku 環境沒有這個擴充,所以我們要透過 composer.json 來靠知 Heroku 我們需要這個東東。
加入 "mbstring": "*" 後記得執行一下 composer update 否則你 push 上 Heroku 是沒有效果的。
驗證碼消失
你應該會發現驗證碼無法出現 ↓

而且訪問驗證碼路徑時會出現這個錯誤訊息 Call to undefined function think\captcha\imagecreate()。
解決方法是在 composer.json,然後在 require 中加入 "ext-gd": "*" 即可解決 ↓

新增文章沒有新增時間
由於 only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause 的關係,所以我們無法透過 CURRENT_TIMESTAMP 自動取得建立時間,所以我針對儲存文章的方法,也就是 save() 做了微調,只需要在 save() 的方法修改成這樣即可:
1 | |
結尾
那麼這樣子就成功將前面所製作的 ThinkPHP 給部屬到 Heroku 上了,接下來將會撰寫最後一篇,最終心得篇?!
最終作品連結:
最後這邊提供完整的 GitHub Repo:GitHub
如果懶得註冊想要玩一下的人可以使用以下帳號:
帳號:admin@gmail.com
密碼:123456
整理這些技術筆記真的很花時間,如果你願意 關閉 Adblock 支持我,我會把這份感謝轉換成更多「踩坑轉避坑」的內容給你!ヽ(・∀・)ノ