使用 Forge 进行 Laravel 部署 - 未找到 VIte 清单

oli*_*rbj 2 php laravel vite

我正在尝试使用 Vite 部署一个全新的 Laravel 9 站点。

\n

我的站点在本地运行得很好,并且部署是使用默认部署脚本通过 Laravel forge 运行的:

\n
cd /home/forge/default\ngit pull origin $FORGE_SITE_BRANCH\n\n$FORGE_COMPOSER install --no-interaction --prefer-dist --optimize-autoloader\n\n( flock -w 10 9 || exit 1\n    echo \'Restarting FPM...\'; sudo -S service $FORGE_PHP_FPM reload ) 9>/tmp/fpmlock\n\nif [ -f artisan ]; then\n    $FORGE_PHP artisan migrate --force\nfi\n
Run Code Online (Sandbox Code Playgroud)\n

在将更改从本地服务器推送到远程服务器之前,我运行:

\n
npm run build\n
Run Code Online (Sandbox Code Playgroud)\n

但是,当该站点部署到 forge 时,我收到以下错误:

\n
\n

(异常(代码:0):在以下位置找不到 Vite 清单:/home/forge/default/public/build/manifest.json 位于 /home/forge/default/vendor/laravel/framework/src/Illuminate/Foundation/Vite。 php:139)

\n
\n

当我 ssh 进入我的服务器时,这是该文件夹的内容/public

\n
.\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 public/\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 favicon.ico\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 index.php\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 robots.txt\n
Run Code Online (Sandbox Code Playgroud)\n

该文件夹不/build应该在生产站点上也可用吗?还是我遗漏了一些东西?请注意,在我的标准生成.gitignore文件中,这些路径被排除:

\n
/public/build\n/public/hot\n/public/storage\n
Run Code Online (Sandbox Code Playgroud)\n

oli*_*rbj 10

编辑 2023 年 7 月 2 日:

我最终改变了我的.gitignore. 我删除了以下内容:

/public/build
/public/hot
/public/storage
Run Code Online (Sandbox Code Playgroud)

并添加了以下内容:

!/public/build
/public/hot
/public/storage
Run Code Online (Sandbox Code Playgroud)

这也解决了这个问题。

原答案:

我通过更新 Laravel Forge 上的部署脚本来修复此问题,以包含npm installnpm run build

cd /home/forge/default
git pull origin $FORGE_SITE_BRANCH

$FORGE_COMPOSER install --no-interaction --prefer-dist --optimize-autoloader

( flock -w 10 9 || exit 1
    echo 'Restarting FPM...'; sudo -S service $FORGE_PHP_FPM reload ) 9>/tmp/fpmlock

if [ -f artisan ]; then
    $FORGE_PHP artisan migrate --force
fi

npm install
npm run build
Run Code Online (Sandbox Code Playgroud)

我看了这个类似问题的回复,基本上说:

生产资产构建是一个已知问题,有多种已知解决方案:

  1. 您在本地构建资产并将其提交到 Git
  2. 您让部署脚本(和服务器)为您构建资产
  3. 您在本地构建资产,将它们发布到云,然后告诉部署脚本下载它们

我选择了选项2:)