jeudi 11 avril 2019

Laravel Job::dispatch() results in undefined method error

I've updated my Laravel application from version 5.7 to 5.8.

Now some of my jobs fail with a message saying, that the SyncJob::dispatch() method is undefined. The upgrade guide only mentions that the fire() method was removed in this version.

Any ideas where the problem lies? I've tried to create new Jobs resulting in the same error. I've deleted an reinstalled the complete vendor-directory, dumped autoload, removed the cache etc.

The Job is triggered my a scheduled command:

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

This is the called command:

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

And finally the Job:

<?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!");
        }
    }
}

And the complete stack trace:

Symfony\Component\Debug\Exception\FatalThrowableError : Call to undefined method Illuminate\Queue\Jobs\SyncJob::dispatch()

at /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Queue/SyncQueue.php:42 38| 39| try { 40| $this->raiseBeforeJobEvent($queueJob); 41|

42| $queueJob->dispatch(); 43| 44| $this->raiseAfterJobEvent($queueJob); 45| } catch (Exception $e) { 46| $this->handleException($queueJob, $e);

Exception trace:

1 Illuminate\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 Illuminate\Bus\Dispatcher::pushCommandToQueue(Object(Illuminate\Queue\SyncQueue), Object(Subscription\Jobs\RenewSubscriptionJob)) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php:160

3 Illuminate\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 Illuminate\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 Illuminate\Foundation\Bus\PendingDispatch::__destruct() /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:399

6 dispatch(Object(Subscription\Jobs\RenewSubscriptionJob)) /home/vagrant/faaren/repositories/website-and-consumer-area/packages/subscription/Commands/RenewSubscriptionsCommand.php:45

7 Subscription\Commands\RenewSubscriptionsCommand::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 Illuminate\Container\BoundMethod::Illuminate\Container{closure}() /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:90

10 Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Object(Closure)) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:34

11 Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), []) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Container/Container.php:580

12 Illuminate\Container\Container::call() /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Console/Command.php:183

13 Illuminate\Console\Command::execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle)) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/symfony/console/Command/Command.php:255

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

15 Illuminate\Console\Command::run(Object(Symfony\Component\Console\Input\ArgvInput), Object(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(Object(Subscription\Commands\RenewSubscriptionsCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(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(Object(Symfony\Component\Console\Input\ArgvInput), Object(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(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Console/Application.php:90

19 Illuminate\Console\Application::run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) /home/vagrant/faaren/repositories/website-and-consumer-area/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:122

20 Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) /home/vagrant/faaren/repositories/website-and-consumer-area/artisan:37



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire