想看解決辦法的直接看最後,以下為流水賬(
最近遇到個坑,就是自己寫著玩的專案上傳到虛擬共享主機做測試,blade 模板使用了 mix()
來載入 CSS 及 JS 結果開首頁就報錯,提示 mix-manifest.json
無法找到,因為我這臺虛擬共享主機寫死的 HTML 根目錄為 domains/my_domian/public_html
,於是抱著儘量少折騰的心態,猜測 mix()
讀取的是 app/public
目錄,也沒多想直接把 mix()
改成了 asset()
。
行了,這回可以正常開啟首頁了。於是乎開啟後臺(使用 tcg/voyager
擴充套件),提示沒有軟連結,要求建立,點選建立以後又報錯提示:symlink(): No such file or directory
。我想還是找個一勞永逸的方法吧。
於是乎上 tcg/voyager
專案主頁看有沒有相似 issue ,瀏覽完了相似情況的解決方法,在我虛擬共享主機上都不適用,但是我看到一個關鍵,就是 symlink()
這個函式,建立軟連結的時候,先呼叫 public_path()
獲取 public
的目錄,看來找到了關鍵,只要查詢 public_path()
方法的預設返回值,應該就能修改 public
目錄預設路徑了,於是用 sublime text 發起在檔案中所搜,找到了擠出呼叫,並定位到了定義檔案在 Illuminate\Foundation\helpers.php
,然而並不是源頭,只有一句 app()->make('path.public')
(後面字串拼接省略),再次在全檔案中搜尋 path.public
,定位到 Illuminate\Foundation\Application.php
中的
protected function bindPathsInContainer()
{
...
$this->instance('path.public', $this->publicPath());
...
}
原來最終的源頭是 Illuminate\Foundation\Application.php
下的 publicPath()
,public
目錄就是在這裡拼接的:$this->basePath.DIRECTORY_SEPARATOR.'public';
,把 'public'
改成 'public_html'
即可。當然最一勞永逸的方法就是購買一臺 vps (#貧窮的流淚熊貓頭)
本作品採用《CC 協議》,轉載必須註明作者和本文連結