gpt4 book ai didi

laravel - Laravel 应用程序的部署会破坏应用程序,直到手动运行 composer install

转载 作者:行者123 更新时间:2023-12-03 21:39:47 26 4
gpt4 key购买 nike

我有一个使用 Passport 提供 API 身份验证的 Laravel 应用程序。该应用程序是使用带有 post-receive Hook 的 git 部署的。接收后脚本的一部分是 Composer 安装。自从我包含 Passport 以来,每当我部署我的应用程序时,API 都会在身份验证门后面的路由上中断,堆栈跟踪粘贴在下面。

当我进入应用程序的服务器并运行完全相同的 composer install在我的 post-receive Hook 中执行命令,然后一切正常。

部署发生时,我没有看到来自 git 的任何错误消息,而且我似乎从 composer install 获得了相同的输出当部署发生以及我手动运行命令时。

这是 composer install 的部署输出命令:

remote: Loading composer repositories with package information        
remote: Installing dependencies (including require-dev) from lock file
remote: Nothing to install or update
remote: Generating autoload files
remote: > php artisan clear-compiled
remote: The compiled class file has been removed.
remote: > php artisan optimize
remote: Generating optimized class loader
remote: Compiling common classes

这是我手动运行命令时看到的内容:
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Nothing to install or update
Generating autoload files
> php artisan clear-compiled
The compiled class file has been removed.
> php artisan optimize
Generating optimized class loader
Compiling common classes

这里发生了什么?似乎部署正在安装 Passport 某些组件的旧版本,然后在运行 composer install 后进行更正。手动,但我不知道为什么会发生这种情况,尤其是为什么每次部署新更新时都会发生这种情况,即使 composer.json 或 composer.lock 没有更改。

这是上面提到的堆栈跟踪:
[2017-01-04 20:36:37] production.ERROR: exception 'BadMethodCallException' with message 'Call to undefined method Illuminate\Database\Query\Builder::withAccessToken()' in /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:2450
Stack trace:
#0 [internal function]: Illuminate\Database\Query\Builder->__call('withAccessToken', Array)
#1 [internal function]: Illuminate\Database\Query\Builder->withAccessToken(Object(Laravel\Passport\Token))
#2 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(1469): call_user_func_array(Array, Array)
#3 [internal function]: Illuminate\Database\Eloquent\Builder->__call('withAccessToken', Array)
#4 [internal function]: Illuminate\Database\Eloquent\Builder->withAccessToken(Object(Laravel\Passport\Token))
#5 /home/portalvarius/app/production/bootstrap/cache/compiled.php(11801): call_user_func_array(Array, Array)
#6 /home/portalvarius/app/production/vendor/laravel/passport/src/Guards/TokenGuard.php(139): Illuminate\Database\Eloquent\Model->__call('withAccessToken', Array)
#7 /home/portalvarius/app/production/vendor/laravel/passport/src/Guards/TokenGuard.php(139): App\Models\User->withAccessToken(Object(Laravel\Passport\Token))
#8 /home/portalvarius/app/production/vendor/laravel/passport/src/Guards/TokenGuard.php(90): Laravel\Passport\Guards\TokenGuard->authenticateViaBearerToken(Object(Illuminate\Http\Request))
#9 /home/portalvarius/app/production/vendor/laravel/passport/src/PassportServiceProvider.php(251): Laravel\Passport\Guards\TokenGuard->user(Object(Illuminate\Http\Request))
#10 [internal function]: Laravel\Passport\PassportServiceProvider->Laravel\Passport\{closure}(Object(Illuminate\Http\Request))
#11 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Auth/RequestGuard.php(53): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#12 /home/portalvarius/app/production/bootstrap/cache/compiled.php(544): Illuminate\Auth\RequestGuard->user()
#13 /home/portalvarius/app/production/bootstrap/cache/compiled.php(548): Illuminate\Auth\RequestGuard->check()
#14 /home/portalvarius/app/production/app/Http/Middleware/Authenticate.php(20): Illuminate\Auth\RequestGuard->guest()
#15 /home/portalvarius/app/production/bootstrap/cache/compiled.php(10052): App\Http\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure), 'api')
#16 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#17 /home/portalvarius/app/production/Api/V1/Http/Middleware/LogApiAccess.php(37): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#18 /home/portalvarius/app/production/bootstrap/cache/compiled.php(10052): Api\V1\Http\Middleware\LogApiAccess->handle(Object(Illuminate\Http\Request), Object(Closure))
#19 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#20 /home/portalvarius/app/production/bootstrap/cache/compiled.php(10160): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#21 /home/portalvarius/app/production/bootstrap/cache/compiled.php(10052): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#22 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#23 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(49): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#24 /home/portalvarius/app/production/bootstrap/cache/compiled.php(10052): Illuminate\Routing\Middleware\ThrottleRequests->handle(Object(Illuminate\Http\Request), Object(Closure), '60', '1')
#25 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#26 /home/portalvarius/app/production/bootstrap/cache/compiled.php(10037): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#27 /home/portalvarius/app/production/bootstrap/cache/compiled.php(8339): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#28 /home/portalvarius/app/production/bootstrap/cache/compiled.php(8330): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#29 /home/portalvarius/app/production/bootstrap/cache/compiled.php(8321): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#30 /home/portalvarius/app/production/bootstrap/cache/compiled.php(2575): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#31 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#32 /home/portalvarius/app/production/bootstrap/cache/compiled.php(3371): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#33 /home/portalvarius/app/production/bootstrap/cache/compiled.php(10052): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#34 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#35 /home/portalvarius/app/production/bootstrap/cache/compiled.php(10037): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#36 /home/portalvarius/app/production/bootstrap/cache/compiled.php(2519): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#37 /home/portalvarius/app/production/bootstrap/cache/compiled.php(2503): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#38 /home/portalvarius/app/production/public/index.php(54): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#39 {main}

最佳答案

好的,所以问题出在工匠优化命令中。正如我在对我的问题的评论中指出的那样,我注意到优化命令通过 post-receive Hook 运行的速度比手动运行命令时快得多。

在我部署的环境中,我在与基本 laravel 目录不同的目录中有一个 composer.phar 文件。 当我在基本目录中对 composer.phar 进行软链接(soft link)时,一切都恢复正常了。

我仍然不确定为什么会发生这个问题,但似乎 Laravel 在从 post-receive 钩子(Hook)运行时可能无法找到我的 Composer 实例,即使我的环境设置为从命令行运行相同的命令有效美好的。

关于laravel - Laravel 应用程序的部署会破坏应用程序,直到手动运行 composer install,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41473107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com