我有一个使用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 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),'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}
好的,问题出在artisan optimize命令中.正如我在关于我的问题的评论中指出的那样,我注意到优化命令通过post-receive挂钩运行得比手动运行命令要快得多.

在我的部署环境中,我在与基本laravel目录分开的目录中有一个composer.phar文件.当我在基本目录中创建一个到composer.phar的软链接时,一切都运行正常.

我仍然不确定为什么会出现这个问题,但是看起来Laravel可能无法在从post-receive挂钩运行时找到我的作曲家实例,即使我的环境已设置为从命令行运行相同的命令精细.

部署Laravel应用程序会中断应用程序,直到手动运行composer install的更多相关文章

  1. 详解laravel安装使用Passport(Api认证)

    这篇文章主要介绍了详解laravel安装使用Passport(Api认证),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. Laravel5.5中利用Passport实现Auth认证的方法

    Laravel5.3 开始使用Passport作为API授权,Passport 是基于 OAuth2 的,下面这篇文章主要给大家介绍了关于Laravel5.5中利用Passport实现Auth认证的方法,文中通过示例代码介绍介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。

  3. koa-passport实现本地验证的方法示例

    这篇文章主要介绍了koa-passport实现本地验证的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. 详解laravel passport OAuth2.0的4种模式

    这篇文章主要介绍了laravel passport OAuth2.0的4种模式,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  5. php – Laravel Passport通过访问令牌获取客户端ID

    我正在写一个小sms网关,供几个项目使用,我实施了laravel护照认证(clientcredentialsgranttoken)然后我将CheckClientCredentials添加到api中间件组:逻辑工作正常,现在在我的控制器中我需要让客户端与有效令牌相关联.routes.PHP文件出于明显的安全原因,我永远不能使用消费者请求发送客户端ID,例如$client_id=$request->c

  6. 部署Laravel应用程序会中断应用程序,直到手动运行composer install

    我有一个使用Passport的Laravel应用程序来提供API身份验证.该应用程序使用带有post-receive挂钩的git进行部署.接收后脚本的一部分是作曲家安装.自从我包含Passport以来,每当我部署我的应用程序时,API都会在身份验证门后面的路由上中断,并在下面粘贴堆栈跟踪.当我进入应用程序的服务器并运行与我的post-receive挂钩完全相同的composerinstall命令时

  7. php – Laravel – Passport / SPA 401未经授权

    我已经注册了LaravelPassport文档中提到的Vue组件,它们也显示在我的应用程序中:但是,它们没有显示任何令牌/客户端,而且我也无法创建任何令牌/客户端,因为我的应用程序说我“未经授权”:这是我的AuthServiceProvider.PHP我还将这个特性包含在我的app/User.PHP中:记住,我使用Laravel作为后端,Vue.js作为前端,这给了我一个SPA.这是我的路线/ap

  8. php – Laravel Passport打印个人访问令牌

    我正在使用Laravel的护照包为我的其他api提供基于令牌的身份验证.现在,我正在使用personalaccesstoken概念来生成访问令牌.要为单个用户生成访问令牌,我使用下面的代码生成名为“android”的令牌.稍后我想在我的管理仪表板上显示个人访问令牌,我很难再次获得生成的令牌.尝试下面的代码,但无法获取访问令牌.我也尝试使用护照vue元素,但它只显示访问令牌名称,而不是实际令牌.请帮

  9. php – 使用Laravel Passport注册用户

    我设置了密码授权.现在,我可以向oauth/token发送一个帖子请求,它适用于Postman.但是,如果我也想从api注册用户怎么办?或者在RegisterController中,在registered()函数中,我应该重定向到oauth/token路由吗?这对我来说很模糊,所以只是想要我什么时候有机会问.)或者我应该在像thisguy这样的oauth/token方法中添加一些东西?也许我错过了一些信息,但根据这个主题我找不到任何东西.在Passport中处理注册用户的正确方法是什么?

  10. php – Laravel护照安装错误

    我刚刚下载了最新的laravel5.3并且我正在尝试安装护照,但是我收到了以下作曲家错误:Composer.json文件http://pastebin.com/ne4RkL96它发生了,因为在发布Laravel5.4之后,这个软件包也已经更新到v2.0并且需要Laravel5.4.但是你正在使用Laravel5.3.尝试安装早期版本:此外,您可以在此处了解此软件包的版本:LaravelPasspo

随机推荐

  1. php – 用户身份验证不会在Laravel包中持久存在

    谢谢事实证明问题在于新的Web中间件,将我需要会话数据的所有路由移动到路由组中,一切正常.

  2. php – 找不到laravel类(适用于localhost但不适用于DO服务器)

    这是一个重复的问题–例如:Laravel4migrations–classnotfound但是,我已经尝试了所有解决方案并且无法解决这个问题.脚本我在我的本地机器上创建了一个Laravel4项目–添加了一些类,控制器,视图等–项目运行良好.然后我将这个新的repo复制到我的DO服务器上–用composer等安装依赖项.该项目看起来不错,除了一个页面发出错误:您可以查看此页面here.我试过了…

  3. php – Laravel SSH服务器未存储在配置文件中

    我有一个涉及服务器管理的项目,我需要执行一些SSH命令.在Laravel我有SSH实用程序(远程),但我必须将配置放在一个文件中.我需要从数据库中连接存储在模型中的凭据.任何想法我怎么能这样做?

  4. php – 如何通过Axios将文件发送到Laravel

    我需要通过Axios将文件从客户端发布到服务器.这是我的Vuejs代码:这是我用于处理已发送文件的Laravel代码:但它始终返回否它不是文件.任何帮助将非常感激.您必须创建一个FormData对象并附加图像文件.一个例子是here.如果有效,请告诉我.

  5. php – Laravel API TokenMismatchException

    我有一个带有帖子数据的API调用;让我们说这是登录过程.使用Chrome的Postman扩展程序,我通过POST发送用户名和密码以登录用户.但是我得到了这样的信息:在我的基本控制器中,我有:当我用beforeFilter删除行时,一切正常.但这不是一个解决方案.任何POST调用都会收到此错误消息.我知道我需要这个_token.但是当我从API调用时,我如何获得此令牌?我知道我可以在Laravel中创建一个令牌,但是当我通过API从外部打电话时我怎么能这样做呢?

  6. php – Laravel重定向到一个路由,但随后apache给出了404错误

    这是我的最终(和工作)vhost配置:

  7. php – Laravel Collection键修改

    我使用Collection类中的filter方法从集合中删除一些对象.但在那次操作之后,有时会出现带钥匙的物体,例剩下1,4,5.我希望在过滤操作后总是有0,1,2,3等顺序的元素.有没有任何优雅的方法来做到这一点,而无需将表重写为新表?您可以使用LaravelCollection的values()方法以序列化顺序生成集合的键,如下所示:希望这可以帮助!

  8. php – Laravel 5,如何测试是否在控制器中选中了Checkbox

    如果选中复选框,我试图获取:在我看来:在我的控制器中:在web.PHP中:但不起作用.我该怎么办?谢谢你的答复.编辑1:这是我的形式很差的建设我相信你真正的问题是你有两种不同的形式.您的复选框采用一种形式,您的提交按钮采用第二种形式.我相信它们都需要采用相同的形式.否则,永远不会返回您的复选框状态,无论其状态如何.在您的视图中,尝试替换您提供的表单标记:

  9. php – Laravel 5 – 根据需要验证数组,但允许传递一个空数组

    我正在使用验证器验证Laravel5.4中的请求,请参阅文档:https://laravel.com/docs/5.4/validation#validating-arrays基本上,这是Controller中的代码:我想要求字段“items”的存在,并且这个代码可以实现,但问题是当“items”字段是空数组时验证失败,即,这是一种不受欢迎的行为.我知道这是“必需”参数的记录行为,但我没有看到任何

  10. php – Laravel扩展Form类

    我正在尝试扩展L4.1中的Form类,但我似乎错过了一些东西.我的文件基于API命名为FormBuilder.PHP,保存在app/libraries/extended/FormBuilder.PHP中.这实际上是我第一次尝试在Laravel中扩展核心类.我似乎无法指出如何正确扩展像这个Form类的核心类.编辑:我将“app/libraries/extended”添加到我的composer.jso

返回
顶部