【问题标题】:Laravel 5.7: Class setQueue does not existLaravel 5.7:类 setQueue 不存在
【发布时间】:2018-10-26 06:41:36
【问题描述】:

尝试发送简单电子邮件时出现此错误:

vendor/laravel/framework/src/Illuminate/Container/Container.php:779 中不存在类 setQueue)

这是导致它的代码:

Mail::raw($data['email_body'], function (Message $message) use ($email_or_url, $data) {
    $message->to($email_or_url);
    $message->subject($data['email_subject']);
});

为什么 Laravel 会尝试排队,我该如何让它停止?

【问题讨论】:

  • 您是否在 .env 配置中设置了 QUEUE_CONNECTION?
  • 设置为sync...我什至不希望它排队。我希望它立即发送。
  • 我在当前的 Laravel 5.7 项目中使用 Mail::raw() 时没有遇到同样的问题,你最近是从以前的版本升级的吗?
  • 不,这是全新的 5.7 安装。
  • 现在看来这是一个已知问题,并已被 Laravel 开发团队承认,可能与 PHP 7.3 有关:github.com/laravel/framework/issues/26819

标签: php laravel email queue


【解决方案1】:

laravel 项目中针对此问题的错误案例。 https://github.com/laravel/framework/issues/26819

原来是php的问题。 Laravel 已对其进行了修补,因此您有 2 个选项可以修复。使用补丁版本,希望php 7.3没有其他地方破坏了laravel,或者将你的项目降级到7.2

【讨论】:

    【解决方案2】:

    我在 MacBook Pro 中也面临同样的问题。对于 MacBook 用户只需使用命令

    “代客重启”

    就我而言,它现在正在工作。尝试重新启动您的服务器,这可能会有所帮助。

    注意:我使用的是 PHP 7.3.*

    【讨论】:

      【解决方案3】:

      确保在 config/queue.php.env 中将 QUEUE_DRIVER 环境变量重命名为 QUEUE_CONNECTION - 它在 5.7 中被重命名

      https://laracasts.com/discuss/channels/laravel/trying-to-send-email-class-setqueue-does-not-exist

      为什么 Laravel 会尝试排队,我该如何让它停止?

      它没有尝试将电子邮件排队,但MailServiceProvider 仍然注册队列驱动程序(当电子邮件实现ShouldQueue 接口时)。

      【讨论】:

      • 奇怪的是这个错误只发生在生产中而不是在我的本地环境中。
      • 您是否在生产环境中缓存配置?你重新运行php artisan config:cache了吗?
      • 我没有在本地或生产环境中缓存配置。
      • 也许运行 php artisan config:clearcomposer dump-autoload 只是为了排除它? (在仔细检查变量在两个地方都被重命名后)
      【解决方案4】:

      它发生在我身上是因为我运行的是 php 7.3,当我降级到 php 7.2.13 时它可以工作,而且我还更改了 .env 和 config/queue.php 中的 QUEUE_DRIVER 变量

      【讨论】:

        【解决方案5】:

        到目前为止,我在对解决方案的研究中发现,就我而言,它与 php 版本无关(由于 laracasts 的答案,我什至重新安装了所有内容并更改了我的服务器提供商),但它是由代码引起的错误,我知道是因为我恢复到以前的提交并且它工作正常。

        我的案例中,这是因为我在发送电子邮件之前进行了交易

        $suma = $user->transactionsAsUser->filter(
                    function ($transaction) {
                        return $transaction->status == 'successful' || $transaction->kanjea_ammount < 0;
                    }
                )->sum('kanjea_ammount');
                $user->kanjea_balance = $suma;
                $user->save();
        \Mail::to($user->email)->send(new \App\Mail\JustRegistered($user));
        

        当我在最后一行之前删除那个片段时,它工作得很好。即使使用 PHP 7.3。

        顺便说一句。这个问题在我本地环境w7+xampp没有出现,只有dokku出现

        【讨论】:

          【解决方案6】:

          我的解决方案是再次valet install,因为在运行brew update/upgrade 后出现错误

          相关细节: PHP 7.3.0 (cli) (built: Dec 7 2018 11:00:11) ( NTS )

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-03-07
            • 1970-01-01
            • 1970-01-01
            • 2019-05-11
            • 1970-01-01
            • 1970-01-01
            • 2019-06-20
            • 2019-05-30
            相关资源
            最近更新 更多