Laravel Job :: dispatch () приводит к неопределенной ошибке метода - PullRequest
2 голосов
/ 12 апреля 2019

Обновление

Job::dispatchNow() отлично работает.


Я обновил свое приложение Laravel с версии 5.7 до 5.8.

Теперь некоторые из моих заданий завершаются с сообщением о том, что метод SyncJob :: dispatch () не определен. В руководстве по обновлению упоминается только то, что метод fire () был удален в этой версии.

Есть идеи, где проблема? Я пытался создать новые рабочие места, в результате чего та же ошибка. Я удалил, переустановил полный каталог vendor, сбросил автозагрузку, удалил кеш и т. Д.

Задание запускается по моей плановой команде:

protected function schedule(Schedule $schedule)
{
    // ...
    $schedule->command(RenewSubscriptionsCommand::class)->dailyAt('00:01');
    // ...
}

Это вызываемая команда:

public function handle()
{
    // ...
    $subscriptions = SubscriptionService::collect()->getAllActiveSubscriptions();
    foreach($subscriptions as $subscription){
        dispatch(new RenewSubscriptionJob($subscription));
    }
    // ...
}

И наконец Иов:

<?php

namespace Subscription\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Subscription\Database\Entities\Subscription;
use Subscription\Exceptions\SubscriptionException;
use Subscription\SubscriptionService;

class RenewSubscriptionJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $subscription = NULL;

    /**
     * RenewSubscriptionJob constructor.
     * @param Subscription $subscription
     */
    public function __construct(Subscription $subscription)
    {
        $this->subscription = $subscription;
    }

    /**
     * @throws SubscriptionException
     */
    public function handle(): void
    {
        SubscriptionService::init($this->getSubscription())->renew();
    }

    protected function getSubscription(): Subscription
    {
        if($this->subscription instanceof Subscription){
            return $this->subscription;
        } else {
            throw new SubscriptionException("Could not renew Subscription! No Subscription-Entity given!");
        }
    }
}

И полная трассировка стека:

Symfony \ Component \ Debug \ Exception \ FatalThrowableError: вызов неопределенного метода Illuminate \ Queue \ Jobs \ SyncJob :: dispatch ()

в /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Queue/SyncQueue.php:42 38 | 39 | пытаться { 40 | $ This-> raiseBeforeJobEvent ($ queueJob); 41 |

42 | $ QueueJob-> отправка (); 43 | 44 | $ This-> raiseAfterJobEvent ($ queueJob); 45 | } catch (исключение $ e) { 46 | $ this-> handleException ($ queueJob, $ e);

Трассировка исключения:

1 Подсветка \ Queue \ SyncQueue :: push (Object (Subscription \ Jobs \ RenewSubscriptionJob)) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php:184

2 Подсветка \ Bus \ Dispatcher :: pushCommandToQueue (Object (Подсветка \ Queue \ SyncQueue), Объект (Subscription \ Jobs \ RenewSubscriptionJob)) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php:160

3 Подсветка \ Bus \ Dispatcher :: dispatchToQueue (Object (Subscription \ Jobs \ RenewSubscriptionJob)) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php:73

4 Подсветка \ Bus \ Dispatcher :: dispatch (Object (Subscription \ Jobs \ RenewSubscriptionJob)) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Foundation/Bus/PendingDispatch.php:112

5 Подсветка \ Foundation \ Bus \ PendingDispatch :: __ destruct () /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:399

6 рассылка (Объект (Subscription \ Jobs \ RenewSubscriptionJob)) /home/vagrant/faaren/repositories/website-and-consumer-area/packages/subscription/Commands/RenewSubscriptionsCommand.php:45

7 Subscription \ Commands \ RenewSubscriptionCommand :: handle () /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:32

8 call_user_func_array ([]) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:32

9 Подсветка \ Container \ BoundMethod :: Подсветка \ Container {closure} () /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:90

10 Осветить \ Container \ BoundMethod :: callBoundMethod (Объект (Осветить \ Основание \ Приложение), Объект (Закрытие)) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:34

11 Подсветка \ Container \ BoundMethod :: call (Объект (Подсветка \ Основа \ Приложение), []) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Container/Container.php:580

12 Подсветка \ Контейнер \ Контейнер :: вызов ()/home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Console/Command.php:183

13 Подсветка \ Консоль \ Command :: execute (Объект (Symfony \ Компонент \ Консоль \ Input \ ArgvInput), Объект (Подсветка \ Console \ OutputStyle)) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/symfony/console/Command/Command.php:255

14 Symfony \ Component \ Console \ Command \ Command :: run (объект (Symfony \ Component \ Console \ Input \ ArgvInput), объект (Illuminate \ Console \ OutputStyle)) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Console/Command.php:170

15 Подсветка \ Console \ Command :: run (Объект (Symfony \ Component \ Console \ Input \ ArgvInput), Объект (Symfony \ Component \ Console \ Output \ ConsoleOutput)) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/symfony/console/Application.php:908

16 Symfony \ Component \ Console \ Application :: doRunCommand (Объект (Subscription \ Commands \ RenewSubscriptionCommand), Объект (Symfony \ Component \ Console \ Input \ ArgvInput), Объект (Symfony \ Component \ Console \ Output \ ConsoleOutput)) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/symfony/console/Application.php:269

17 Symfony \ Component \ Console \ Application :: doRun (Объект (Symfony \ Component \ Console \ Input \ ArgvInput), Объект (Symfony \ Component \ Console \ Output \ ConsoleOutput)) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/symfony/console/Application.php:145

18 Symfony \ Component \ Console \ Application :: run (Объект (Symfony \ Component \ Console \ Input \ ArgvInput), Объект (Symfony \ Component \ Console \ Output \ ConsoleOutput)) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Console/Application.php:90

19 Подсветка \ Console \ Application :: run (Объект (Symfony \ Component \ Console \ Input \ ArgvInput), Объект (Symfony \ Component \ Console \ Output \ ConsoleOutput)) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:122

20 Подсветка \ Foundation \ Console \ Kernel :: handle (Объект (Symfony \ Component \ Console \ Input \ ArgvInput), Объект (Symfony \ Component \ Console \ Output \ ConsoleOutput)) / Главная / бродяга / faaren / Хранилища / веб-и-потребителя район / ремесленник: 37

1 Ответ

1 голос
/ 12 апреля 2019

диспетчеризация Работа, как это в цикле foreach:

RenewSubscriptionJob::dispatch($subscription);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...