I suspect this is related to some sort of cacheing issue, but I'll be damned if I can track it down. I've flushed all caches I can find, no matter how unlikely.
I have a Model that is successfully performing two conversions (let's call them 'thumb' and 'masthead'). When I update my code to add a third conversion (called 'card') the Horizon job fails with an InvalidConversion exception saying "card" isn't found:
Spatie\MediaLibrary\Exceptions\InvalidConversion: There is no conversion named `card` in /var/www/vendor/spatie/laravel-medialibrary/src/Exceptions/InvalidConversion.php:11
However, if I look at the Horizon error data, I see it there in the list. This has happened on multiple models in my app, and I'm a bit lost as to how to further debug the issue.
{
"conversions": {
"media": null,
"items": {
"4": {
"name": "masthead",
"extractVideoFrameAtSecond": 0,
"manipulations": {
"manipulationSequence": {
"groups": [
{
"optimize": "{\"Spatie\\\\ImageOptimizer\\\\Optimizers\\\\Jpegoptim\":[\"--strip-all\",\"--all-progressive\"],\"Spatie\\\\ImageOptimizer\\\\Optimizers\\\\Pngquant\":[\"--force\"],\"Spatie\\\\ImageOptimizer\\\\Optimizers\\\\Optipng\":[\"-i0\",\"-o2\",\"-quiet\"],\"Spatie\\\\ImageOptimizer\\\\Optimizers\\\\Svgo\":[\"--disable=cleanupIDs\"],\"Spatie\\\\ImageOptimizer\\\\Optimizers\\\\Gifsicle\":[\"-b\",\"-O3\"]}",
"format": "jpg",
"width": "1000",
"height": "250",
"fit": "crop"
}
]
}
},
"performOnCollections": [
"event-keyart"
],
"performOnQueue": true,
"keepOriginalImageFormat": false,
"generateResponsiveImages": false
},
"5": {
"name": "thumb",
"extractVideoFrameAtSecond": 0,
"manipulations": {
"manipulationSequence": {
"groups": [
{
"optimize": "{\"Spatie\\\\ImageOptimizer\\\\Optimizers\\\\Jpegoptim\":[\"--strip-all\",\"--all-progressive\"],\"Spatie\\\\ImageOptimizer\\\\Optimizers\\\\Pngquant\":[\"--force\"],\"Spatie\\\\ImageOptimizer\\\\Optimizers\\\\Optipng\":[\"-i0\",\"-o2\",\"-quiet\"],\"Spatie\\\\ImageOptimizer\\\\Optimizers\\\\Svgo\":[\"--disable=cleanupIDs\"],\"Spatie\\\\ImageOptimizer\\\\Optimizers\\\\Gifsicle\":[\"-b\",\"-O3\"]}",
"format": "jpg",
"width": "300",
"height": "300",
"fit": "crop"
}
]
}
},
"performOnCollections": [
"event-keyart"
],
"performOnQueue": true,
"keepOriginalImageFormat": false,
"generateResponsiveImages": false
},
"6": {
"name": "card",
"extractVideoFrameAtSecond": 0,
"manipulations": {
"manipulationSequence": {
"groups": [
{
"optimize": "{\"Spatie\\\\ImageOptimizer\\\\Optimizers\\\\Jpegoptim\":[\"--strip-all\",\"--all-progressive\"],\"Spatie\\\\ImageOptimizer\\\\Optimizers\\\\Pngquant\":[\"--force\"],\"Spatie\\\\ImageOptimizer\\\\Optimizers\\\\Optipng\":[\"-i0\",\"-o2\",\"-quiet\"],\"Spatie\\\\ImageOptimizer\\\\Optimizers\\\\Svgo\":[\"--disable=cleanupIDs\"],\"Spatie\\\\ImageOptimizer\\\\Optimizers\\\\Gifsicle\":[\"-b\",\"-O3\"]}",
"format": "jpg",
"width": "400",
"height": "250"
}
]
}
},
"performOnCollections": [
"event-keyart"
],
"performOnQueue": true,
"keepOriginalImageFormat": false,
"generateResponsiveImages": false
}
}
},
"media": {
"class": "Spatie\\MediaLibrary\\Models\\Media",
"id": 6731,
"relations": [],
"connection": "mysql"
},
"job": null,
"connection": null,
"queue": null,
"chainConnection": null,
"chainQueue": null,
"delay": null,
"chained": []
}
Under:
The full stack trace:
Stack trace:
#0 /var/www/vendor/spatie/laravel-medialibrary/src/Conversion/ConversionCollection.php(61): Spatie\MediaLibrary\Exceptions\InvalidConversion::unknownName('card')
#1 /var/www/vendor/spatie/laravel-medialibrary/src/UrlGenerator/UrlGeneratorFactory.php(27): Spatie\MediaLibrary\Conversion\ConversionCollection->getByName('card')
#2 /var/www/vendor/spatie/laravel-medialibrary/src/Models/Media.php(74): Spatie\MediaLibrary\UrlGenerator\UrlGeneratorFactory::createForMedia(Object(Spatie\MediaLibrary\Models\Media), 'card')
#3 /var/www/vendor/spatie/laravel-medialibrary/src/FileManipulator.php(81): Spatie\MediaLibrary\Models\Media->getPath('card')
#4 /var/www/vendor/laravel/framework/src/Illuminate/Support/Collection.php(1401): Spatie\MediaLibrary\FileManipulator->Spatie\MediaLibrary\{closure}(Object(Spatie\MediaLibrary\Conversion\Conversion), 6)
#5 [internal function]: Illuminate\Support\Collection->Illuminate\Support\{closure}(Object(Spatie\MediaLibrary\Conversion\Conversion), 6)
#6 /var/www/vendor/laravel/framework/src/Illuminate/Support/Arr.php(617): array_filter(Array, Object(Closure), 1)
#7 /var/www/vendor/laravel/framework/src/Illuminate/Support/Collection.php(492): Illuminate\Support\Arr::where(Array, Object(Closure))
#8 /var/www/vendor/laravel/framework/src/Illuminate/Support/Collection.php(1402): Illuminate\Support\Collection->filter(Object(Closure))
#9 /var/www/vendor/spatie/laravel-medialibrary/src/FileManipulator.php(90): Illuminate\Support\Collection->reject(Object(Closure))
#10 /var/www/vendor/spatie/laravel-medialibrary/src/Jobs/PerformConversions.php(32): Spatie\MediaLibrary\FileManipulator->performConversions(Object(Spatie\MediaLibrary\Conversion\ConversionCollection), Object(Spatie\MediaLibrary\Models\Media))
#11 [internal function]: Spatie\MediaLibrary\Jobs\PerformConversions->handle()
#12 /var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
#13 /var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#14 /var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#15 /var/www/vendor/laravel/framework/src/Illuminate/Container/Container.php(572): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#16 /var/www/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(94): Illuminate\Container\Container->call(Array)
#17 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(Spatie\MediaLibrary\Jobs\PerformConversions))
#18 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Spatie\MediaLibrary\Jobs\PerformConversions))
#19 /var/www/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(98): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#20 /var/www/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(49): Illuminate\Bus\Dispatcher->dispatchNow(Object(Spatie\MediaLibrary\Jobs\PerformConversions), false)
#21 /var/www/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(83): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\RedisJob), Array)
#22 /var/www/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(327): Illuminate\Queue\Jobs\Job->fire()
#23 /var/www/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(277): Illuminate\Queue\Worker->process('redis', Object(Illuminate\Queue\Jobs\RedisJob), Object(Illuminate\Queue\WorkerOptions))
#24 /var/www/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(118): Illuminate\Queue\Worker->runJob(Object(Illuminate\Queue\Jobs\RedisJob), 'redis', Object(Illuminate\Queue\WorkerOptions))
#25 /var/www/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(102): Illuminate\Queue\Worker->daemon('redis', 'default', Object(Illuminate\Queue\WorkerOptions))
#26 /var/www/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(86): Illuminate\Queue\Console\WorkCommand->runWorker('redis', 'default')
#27 /var/www/vendor/laravel/horizon/src/Console/WorkCommand.php(46): Illuminate\Queue\Console\WorkCommand->handle()
#28 [internal function]: Laravel\Horizon\Console\WorkCommand->handle()
#29 /var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
#30 /var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#31 /var/www/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#32 /var/www/vendor/laravel/framework/src/Illuminate/Container/Container.php(572): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#33 /var/www/vendor/laravel/framework/src/Illuminate/Console/Command.php(183): Illuminate\Container\Container->call(Array)
#34 /var/www/vendor/symfony/console/Command/Command.php(255): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#35 /var/www/vendor/laravel/framework/src/Illuminate/Console/Command.php(170): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#36 /var/www/vendor/symfony/console/Application.php(901): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#37 /var/www/vendor/symfony/console/Application.php(262): Symfony\Component\Console\Application->doRunCommand(Object(Laravel\Horizon\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#38 /var/www/vendor/symfony/console/Application.php(145): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#39 /var/www/vendor/laravel/framework/src/Illuminate/Console/Application.php(89): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#40 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(122): Illuminate\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#41 /var/www/artisan(37): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#42 {main}
You probably forgot the restart horizon after having added that conversion.
You should restart horizon after every code change.
Most helpful comment
You probably forgot the restart horizon after having added that conversion.
You should restart horizon after every code change.