所有的.env,皆透過heroku dashboard的config設定,這樣可以保護secrete token的資料等等,給單一人管理。
env() --> 是laravel包裝原生php getenv() method,讓env()可以有default value.
heroku addon: --> dyno type hobby-dev.
上傳完網站後,就要將網站的本地端database連結移駕到heroku的線上的database,
不然所有的東西就串不起來了!!
基於Laravel使用PDO的關係,我們在這次的佈署上算是已經十分的容易了!!!
首先我們會利用到上一章提到的Config Variable,其實這個非常好用,
他可以直接在heroku網頁的dashboard 個人app那邊改動,你就不需要一直在本地端改完後git push heroku master
這次有用到的變數
APP_DEBUG 設定為true
APP_KEY 設定為laravel key
DATABASE_URL 當你在heroku綁定完postgre之後就會自動幫您新增了
基本上只要參考官方文件
https://devcenter.heroku.com/articles/heroku-postgresql#connecting-in-php
上面這連結內網頁,並且搜尋
Connecting with Laravel
照著文件做就沒問題啦!!
只要修改Laravel Project的Config/database.php 下面三個部分
主要就是getenv( ) 會去抓dyno的環境變數,然而我們在Heroku dashboard已經有設定Config Variable了,所以就抓到
並且解析對應的host database port user password等等
讓laravel可以依照Config Variable的參數去做連線。
在連線完後,你會發現因為Postgre是新開的DB 上面連一個東西都沒有
所以你需要呼叫heroku run php artisan migrate,就跟本地端一樣他會去database/migrations/尋找你的migration
並且一個一個按照裡面的說明建立Table。
這裡必須要注意到一點,也就是我踩到的坑,雖然這個坑是因為我還沒看完laravel的Document造成的,還是紀錄一下
在Laravel的Model中,可能會有向下圖相關的屬性和方法,而今天遇到的問題就是$table = 'posts' 打成了 $table = 'Posts'
p變成了大寫,
根據 https://stackoverflow.com/questions/6134006/are-table-names-in-mysql-case-sensitive 說法,
在windows中Database其實是Case Insensitive的,
但是今天我們使用heroku,在官方文件說到Heroku's dyno is a lightweight Linux container 所以,我們git push
heroku master之後,
一直發現Can't find Relation Post table, Linux內的database是Case sensitive的!!!!!
最重要的還是在命名時,確保變數 數值的正確性,有時候寫程式亂命名反而會砸到自己的腳...
參考連結:
https://www.youtube.com/watch?v=R8A3h3y5Z8c