2017-08-02 301 views
1

在我的API上,我想更改队列驱动程序。我想从Beanstalkd切换到Redis。致命错误:未找到类'Pheanstalk Pheanstalk'

所以在我的composer.json我改变了我的依赖"pda/pheanstalk": "^3.0""predis/predis": "~1.0"。然后我去Laravel伪造,增加了新的队列工作,看起来像这样:

Queue workers

我更新了我的.env文件:QUEUE_DRIVER=redis就跑composer update。之后,我尝试发出通知(使用电子邮件),通知实现了ShouldQueue界面并使用Queueable特质。通知发送成功(也在队列中)。

在那一刻,我是幸福的,但等待......我检查我的哨兵问题,看到以下错误:

Fatal Error: Class 'Pheanstalk\Pheanstalk' not found in vendor/laravel/framework/src/Illuminate/Queue/Connectors/BeanstalkdConnector.php in connect at line 21.

此时的bug /问题发生围绕一分钟200次。

我试了一下:从队列

  • 重新启动服务器
  • 即使再次安装pda/pheanstalk包过作曲家

    1. 删除所有失败的作业。

    所以此刻我已经安装了pda/pheanstalk但没有beanstalkd队列工作运行,我仍然得到Class 'Pheanstalk\Pheanstalk' not found错误。

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

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

    编辑

    现在我已经删除了我的网站从锻造,检查如果代码被删除。在Sentry中,错误仍在记录中。该项目甚至不再存在于服务器上。

  • +1

    尝试重新启动所有工作人员 – elegisandi

    回答

    0

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

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

    的另一件事情 - 你有主管或某事已经运行较旧的队列配置?如果是这样 - 那可能是重新启动旧队列。

    +0

    我也在使用一个dev和staging站点。我忘了用正确的设置重新启动队列。谢谢。 –

    0

    您是否在config/app.php文件中注册了Pheanstalk\Pheanstalk

    通常情况就是这样,Laravel将不会看到任何未注册的依赖关系。

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

    +0

    'Pheanstalk \ Pheanstalk'不是Laravel软件包,而是PHP软件包。它没有服务提供商。所以把这个类放在'providers'数组中,不会有什么区别。 –

    +0

    @DeesOomens无关紧要。如果将它添加到'providers'数组中,应用程序将尝试寻找这个类并使用它。 Laravel不知道它是不是一个独立的lib或不 – vladko

    +0

    @vladko它确实很重要... [Pheanstalk](https://github.com/pda/pheanstalk)没有服务提供者。 –

    0

    确保您删除了对conig/app.php以及运行composer dump-autoload中此类的任何引用。

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