2017-08-02 305 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中此類的任何引用。

    您可能想要在您的應用中對此課程進行全局搜索以確保它已經消失。最後,刪除供應商文件夾,如果它仍然存在。