在我的API上,我想更改队列驱动程序。我想从Beanstalkd切换到Redis。
因此,在我的composer.json
中,我将我的依赖项"pda/pheanstalk": "^3.0"
更改为"predis/predis": "~1.0"
。然后我去了Laravel Forge,添加了一个新的Queue Worker,看起来像这样:
我更新了.env
文件:QUEUE_DRIVER=redis
并运行了composer update
。之后,我尝试触发通知(使用电子邮件),通知实现ShouldQueue
接口并使用Queueable
特征。通知成功发送(也在队列中)。
那一刻我很高兴,但是等等......我检查了我的Sentry问题并看到了以下错误:
致命错误:Class' Pheanstalk \ Pheanstalk'在第21行的连接中找不到vendor / laravel / framework / src / Illuminate / Queue / Connectors / BeanstalkdConnector.php 。
此时,错误/问题每分钟发生200次左右。
我尝试了什么:
pda/pheanstalk
包。所以目前我已经安装了pda/pheanstalk
,但没有运行beanstalkd队列工作,我仍然遇到Class 'Pheanstalk\Pheanstalk' not found
错误。
我最好的猜测是,当我删除beanstalkd队列工作者并使用composer删除了包时,他们是在队列工作者中运行的工作,现在它一遍又一遍地重试该工作。但当然我可能完全错了。
关于这里出了什么问题的任何想法?
修改
我现在已从Forge删除了我的网站,检查代码是否已删除。在Sentry中,错误仍在记录中..项目甚至不再存在于服务器上。
答案 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;