部署Laravel应用程序会中断应用程序,直到手动运行composer insta
我有一个使用Passport的Laravel应用程序来提供API身份验证.该应用程序使用带有post-receive挂钩的git进行部署.接收后脚本的一部分是作曲家安装.自从我包含Passport以来,每当我部署我的应用程序时,API都会在身份验证门后面的路由上中断,并在下面粘贴堆栈跟踪.
当我进入应用程序的服务器并运行与我的post-receive挂钩完全相同的composer install命令时,事情再次正常工作. 当部署发生时,我没有看到来自git的任何错误消息,并且当部署发生时和我手动运行命令时,我看起来从composer install获得相同的输出. 这是composer install命令的deploy输出: 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安装后进行更正,但我不知道为什么会发生这种情况,特别是为什么每次部署时都会发生这种情况.即使对composer.json或composer.lock没有任何更改,也会进行新的更新. 这是上面提到的堆栈跟踪: [2017-01-04 20:36:37] production.ERROR: exception 'BadMethodCallException' with message 'Call to undefined method IlluminateDatabaseQueryBuilder::withAccessToken()' in /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:2450 Stack trace: #0 [internal function]: IlluminateDatabaseQueryBuilder->__call('withAccessToken',Array) #1 [internal function]: IlluminateDatabaseQueryBuilder->withAccessToken(Object(LaravelPassportToken)) #2 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(1469): call_user_func_array(Array,Array) #3 [internal function]: IlluminateDatabaseEloquentBuilder->__call('withAccessToken',Array) #4 [internal function]: IlluminateDatabaseEloquentBuilder->withAccessToken(Object(LaravelPassportToken)) #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): IlluminateDatabaseEloquentModel->__call('withAccessToken',Array) #7 /home/portalvarius/app/production/vendor/laravel/passport/src/Guards/TokenGuard.php(139): AppModelsUser->withAccessToken(Object(LaravelPassportToken)) #8 /home/portalvarius/app/production/vendor/laravel/passport/src/Guards/TokenGuard.php(90): LaravelPassportGuardsTokenGuard->authenticateViaBearerToken(Object(IlluminateHttpRequest)) #9 /home/portalvarius/app/production/vendor/laravel/passport/src/PassportServiceProvider.php(251): LaravelPassportGuardsTokenGuard->user(Object(IlluminateHttpRequest)) #10 [internal function]: LaravelPassportPassportServiceProvider->LaravelPassport{closure}(Object(IlluminateHttpRequest)) #11 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Auth/RequestGuard.php(53): call_user_func(Object(Closure),Object(IlluminateHttpRequest)) #12 /home/portalvarius/app/production/bootstrap/cache/compiled.php(544): IlluminateAuthRequestGuard->user() #13 /home/portalvarius/app/production/bootstrap/cache/compiled.php(548): IlluminateAuthRequestGuard->check() #14 /home/portalvarius/app/production/app/Http/Middleware/Authenticate.php(20): IlluminateAuthRequestGuard->guest() #15 /home/portalvarius/app/production/bootstrap/cache/compiled.php(10052): AppHttpMiddlewareAuthenticate->handle(Object(IlluminateHttpRequest),Object(Closure),'api') #16 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest)) #17 /home/portalvarius/app/production/Api/V1/Http/Middleware/LogApiAccess.php(37): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest)) #18 /home/portalvarius/app/production/bootstrap/cache/compiled.php(10052): ApiV1HttpMiddlewareLogApiAccess->handle(Object(IlluminateHttpRequest),Object(Closure)) #19 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest)) #20 /home/portalvarius/app/production/bootstrap/cache/compiled.php(10160): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest)) #21 /home/portalvarius/app/production/bootstrap/cache/compiled.php(10052): IlluminateRoutingMiddlewareSubstituteBindings->handle(Object(IlluminateHttpRequest),Object(Closure)) #22 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest)) #23 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(49): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest)) #24 /home/portalvarius/app/production/bootstrap/cache/compiled.php(10052): IlluminateRoutingMiddlewareThrottleRequests->handle(Object(IlluminateHttpRequest),'60','1') #25 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest)) #26 /home/portalvarius/app/production/bootstrap/cache/compiled.php(10037): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest)) #27 /home/portalvarius/app/production/bootstrap/cache/compiled.php(8339): IlluminatePipelinePipeline->then(Object(Closure)) #28 /home/portalvarius/app/production/bootstrap/cache/compiled.php(8330): IlluminateRoutingRouter->runRouteWithinStack(Object(IlluminateRoutingRoute),Object(IlluminateHttpRequest)) #29 /home/portalvarius/app/production/bootstrap/cache/compiled.php(8321): IlluminateRoutingRouter->dispatchToRoute(Object(IlluminateHttpRequest)) #30 /home/portalvarius/app/production/bootstrap/cache/compiled.php(2575): IlluminateRoutingRouter->dispatch(Object(IlluminateHttpRequest)) #31 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): IlluminateFoundationHttpKernel->IlluminateFoundationHttp{closure}(Object(IlluminateHttpRequest)) #32 /home/portalvarius/app/production/bootstrap/cache/compiled.php(3371): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest)) #33 /home/portalvarius/app/production/bootstrap/cache/compiled.php(10052): IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode->handle(Object(IlluminateHttpRequest),Object(Closure)) #34 /home/portalvarius/app/production/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(33): IlluminatePipelinePipeline->IlluminatePipeline{closure}(Object(IlluminateHttpRequest)) #35 /home/portalvarius/app/production/bootstrap/cache/compiled.php(10037): IlluminateRoutingPipeline->IlluminateRouting{closure}(Object(IlluminateHttpRequest)) #36 /home/portalvarius/app/production/bootstrap/cache/compiled.php(2519): IlluminatePipelinePipeline->then(Object(Closure)) #37 /home/portalvarius/app/production/bootstrap/cache/compiled.php(2503): IlluminateFoundationHttpKernel->sendRequestThroughRouter(Object(IlluminateHttpRequest)) #38 /home/portalvarius/app/production/public/index.php(54): IlluminateFoundationHttpKernel->handle(Object(IlluminateHttpRequest)) #39 {main}
好的,问题出在artisan optimize命令中.正如我在关于我的问题的评论中指出的那样,我注意到优化命令通过post-receive挂钩运行得比手动运行命令要快得多.
在我的部署环境中,我在与基本laravel目录分开的目录中有一个composer.phar文件.当我在基本目录中创建一个到composer.phar的软链接时,一切都运行正常. 我仍然不确定为什么会出现这个问题,但是看起来Laravel可能无法在从post-receive挂钩运行时找到我的作曲家实例,即使我的环境已设置为从命令行运行相同的命令精细. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |