Reputation: 2785
Update
Job::dispatchNow()
works fine.
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
Upvotes: 3
Views: 12866
Reputation: 919
dispatch Job like this in foreach loop :
RenewSubscriptionJob::dispatch($subscription);
Upvotes: 1