$ ls crystal_folder

Vercel能架Laravel-admin嗎?!

先說結論

可以,其實他就是一種Serverless版的Laravel,但思維要改變,例如log變成標準輸出到平台,由平台提供調閱方式(像AWS有Cloudwatch);檔案儲存也是使用外部功能如AWS S3這種比較好管理,但S3要錢就是了...之後會想辦法找到功能類似的免費替代品


網路文章閱讀與疑難排解


後來呢?

最後學上面的儲藏庫描成這樣

vercel.json

{
    "version": 2,
    "functions": {
        "api/index.php": { "runtime": "vercel-php@0.6.1" }
    },
    "routes": [
        {
            "src": "/upload/images/(.*)",
            "dest": "/public/upload/images/$1"
        },
        {
            "src": "/vendor/laravel-admin/(.*)",
            "dest": "/public/vendor/laravel-admin/$1"
        },
        {
            "src": "/(.*)",
            "dest": "/api/index.php"
        }
    ],
    "env": {
        "APP_ENV": "prod",
        "APP_DEBUG": "true",

        "APP_CONFIG_CACHE": "/tmp/config.php",
        "APP_EVENTS_CACHE": "/tmp/events.php",
        "APP_PACKAGES_CACHE": "/tmp/packages.php",
        "APP_ROUTES_CACHE": "/tmp/routes.php",
        "APP_SERVICES_CACHE": "/tmp/services.php",
        "VIEW_COMPILED_PATH": "/tmp",

        "CACHE_DRIVER": "array",
        "LOG_CHANNEL": "stderr",
        "SESSION_DRIVER": "file"
    }
}

終於看到正常的登入畫面!!

但登入後又顯示419頁面過期

🫠

應該跟session或令牌有關...?➡️把SESSION_DRIVER改為cookie就好了,但這樣真的好嗎🤔

還有另一案,跟下方修改檔案路徑有關,但因為跟這個json有關所以先note:

把上方json APP_CONFIG_CACHE到CACHE_DRIVER拔掉後會出現cache目錄錯誤(而且還沒進到Laravel,竟然是Symfony的錯誤);然後可能跟我改掉session儲存的storage路徑有關,SESSION_DRIVER改回file也會報錯檔案不存在-這些env雖然大部分在Laravel專案表面看似沒用到,但底層可能會吃??又或是/tmp/下對應目錄不存在無法建立檔案(指session,cache不確定,但在改/tmp/前,session驅動為file頂多顯示Laravel 419頁面過期)

我後來想想,cache遇到的問題跟session一樣,因為我把CACHE_DRIVER拔掉,那Laravel預設會走file,問題是我描的路徑資料夾又不存在..不過其它設定真的就神奇了(Laravel include Symfony)


又然後呢?

因為storage不可寫,延伸很多問題,例如不能上傳頭像、沒辦法看到傳統Laravel log(它輸出到控制台那啥啦只剩accept跟exit-.-

可能要嘗試更換storage為/tmp...?(相關討論:blade模板沒有辦法編譯)-這個想法出自於,Vercel每個專案在作業系統的/tmp/有512MB的空間可以用

我總共改了這些檔案(不要理vercel.jsonapp.php,那兩個是改壞的),並確保vercel.json內容是對的,就能上傳頭像了,不過旋即又遇到無法顯示頭像的問題,應該跟vercel.json目錄描法應該要一起改變有關-但我發現vercel.json好像描不到根目錄...等於說tmp資料夾可能只能供需要上傳檔案的function使用(搞不好還不能用??),而且這目錄的性質本來就是重開機就會消失..

效益不是很大,而且導致專案在不同環境難以使用(雖然可以用.env判斷環境,但有必要費這工嗎?),又全都改回來了..

乖乖用類似S3的桶子吧...?

老實說log就算成功生在/tmp也沒辦法很方便看到(Vercel介面根本看不到,得寫個程式叫出來=_=


20240501開發日誌

#Laravel #Vercel #dev #php