致命错误:Class' Pheanstalk \ Pheanstalk'找不到

时间:2017-08-02 14:19:50

标签: php laravel queue

在我的API上,我想更改队列驱动程序。我想从Beanstalkd切换到Redis。

因此,在我的composer.json中,我将我的依赖项"pda/pheanstalk": "^3.0"更改为"predis/predis": "~1.0"。然后我去了La​​ravel Forge,添加了一个新的Queue Worker,看起来像这样:

Queue workers

我更新了.env文件:QUEUE_DRIVER=redis并运行了composer update。之后,我尝试触发通知(使用电子邮件),通知实现ShouldQueue接口并使用Queueable特征。通知成功发送(也在队列中)。

那一刻我很高兴,但是等等......我检查了我的Sentry问题并看到了以下错误:

  

致命错误:Class' Pheanstalk \ Pheanstalk'在第21行的连接中找不到vendor / laravel / framework / src / Illuminate / Queue / Connectors / BeanstalkdConnector.php

此时,错误/问题每分钟发生200次左右。

我尝试了什么:

  1. 从队列中删除所有失败的作业
  2. 重新启动服务器
  3. 甚至再次在作曲家上安装pda/pheanstalk包。
  4. 所以目前我已经安装了pda/pheanstalk,但没有运行beanstalkd队列工作,我仍然遇到Class 'Pheanstalk\Pheanstalk' not found错误。

    我最好的猜测是,当我删除beanstalkd队列工作者并使用composer删除了包时,他们是在队列工作者中运行的工作,现在它一遍又一遍地重试该工作。但当然我可能完全错了。

    关于这里出了什么问题的任何想法?

    修改

    我现在已从Forge删除了我的网站,检查代码是否已删除。在Sentry中,错误仍在记录中..项目甚至不再存在于服务器上。

4 个答案:

答案 0 :(得分:1)

听起来你没有重新启动队列来使用新设置吗?

登录服务器并运行php artisan queue:restart

另一件事 - 您是否有Supervisor或已经运行旧队列配置的东西?如果是这样 - 那可能是重新启动旧队列。

答案 1 :(得分:0)

您是否在[HttpGet("VideoFileDownload")] public IActionResult VideoFileDownloadAsync([FromQuery]int VideoId) { ...code to get blob file long myFileSize = blob.Length; // Or wherever it is you can get your file size from. this.Response.ContentLength = myFileSize; return new FileStreamResult(blob.OpenRead(), new MediaTypeHeaderValue("application/octet-stream") } 文件中注册了Pheanstalk\Pheanstalk

通常就是这种情况,Laravel不会看到任何未注册的依赖项。

在包含应用程序配置的数组内部,找到`providers',并将给定类的命名空间放在该数组中。

答案 2 :(得分:0)

请确保在conig/app.php删除对此课程的任何引用,并运行composer dump-autoload

您可能希望在应用中对此课程进行全局搜索,以确保它已消失。最后,删除供应商文件夹,如果它仍然存在。

答案 3 :(得分:0)

将pheanstalk安装为composer的依赖项:

  

作曲家需要pda / pheanstalk

在PHP文件中

  

使用Pheanstalk \ Pheanstalk;