Renaming an asset folder causes the UpdateAssetReferences job to time out and relinking does not occur.
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 38/100
Hướng nghiên cứu
Start by reading Statamic\Listeners\UpdateAssetReferences and Statamic\Data\DataReferenceUpdater, especially the calls shown in the stack trace. Reproduce by renaming an asset folder on a content-heavy site with update_references enabled, then trace why reference updating takes longer than the queue timeout. Done when references are relinked without the job timing out.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Bug description
When an asset folder is renamed we get failing Statamic\Listeners\UpdateAssetReferences jobs in the queue. The timeout happens at 30, 60 and 120 seconds. This issue is similar to #11769, but in this case relates to renaming folders rather than replacing assets.
How to reproduce
On a content-heavy site with update_references set to true, rename an asset folder. The UpdateAssetReferences job will time out.
Logs
Exception
Illuminate\Queue\TimeoutExceededException: Statamic\Listeners\UpdateAssetReferences has timed out. in /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/TimeoutExceededException.php:15
Stack trace:
#0 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(873): Illuminate\Queue\TimeoutExceededException::forJob(Object(Illuminate\Queue\Jobs\RedisJob))
#1 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(242): Illuminate\Queue\Worker->timeoutExceededException(Object(Illuminate\Queue\Jobs\RedisJob))
#2 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/Traits/EnumeratesValues.php(1070): Illuminate\Queue\Worker->Illuminate\Queue\{closure}(14, Array)
#3 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/Collection.php(44): Illuminate\Support\Collection->getArrayableItems(Array)
#4 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/Collection.php(142): Illuminate\Support\Collection->__construct(Array)
#5 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/Traits/EnumeratesValues.php(442): Illuminate\Support\Collection->collapse()
#6 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Fields/Fields.php(225): Illuminate\Support\Collection->flatMap(Object(Closure))
#7 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Fields/Fields.php(40): Statamic\Fields\Fields->resolveFields()
#8 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Fields/Fields.php(29): Statamic\Fields\Fields->setItems(Array)
#9 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Fields/Tab.php(55): Statamic\Fields\Fields->__construct(Array)
#10 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/HigherOrderCollectionProxy.php(66): Statamic\Fields\Tab->fields()
#11 [internal function]: Illuminate\Support\HigherOrderCollectionProxy->Illuminate\Support\{closure}(Object(Statamic\Fields\Tab), 'article')
#12 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/Arr.php(823): array_map(Object(Closure), Array, Array)
#13 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/Collection.php(844): Illuminate\Support\Arr::map(Array, Object(Closure))
#14 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/HigherOrderCollectionProxy.php(63): Illuminate\Support\Collection->map(Object(Closure))
#15 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Fields/Blueprint.php(354): Illuminate\Support\HigherOrderCollectionProxy->__call('fields', Array)
#16 /home/unite/releases/20260129113559/vendor/spatie/blink/src/Blink.php(306): Statamic\Fields\Blueprint->Statamic\Fields\{closure}()
#17 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Support/Blink.php(18): Spatie\Blink\Blink->once('blueprint-field...', Object(Closure))
#18 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(363): Statamic\Support\Blink->__call('once', Array)
#19 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Fields/Blueprint.php(357): Illuminate\Support\Facades\Facade::__callStatic('once', Array)
#20 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Data/DataReferenceUpdater.php(79): Statamic\Fields\Blueprint->fields()
#21 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Data/DataReferenceUpdater.php(63): Statamic\Data\DataReferenceUpdater->getTopLevelFields()
#22 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Listeners/UpdateAssetReferences.php(95): Statamic\Data\DataReferenceUpdater->updateReferences('event/ch-spital...', NULL)
#23 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Collections/Traits/EnumeratesValues.php(272): Statamic\Listeners\UpdateAssetReferences->Statamic\Listeners\{closure}(Object(Statamic\Eloquent\Entries\Entry), 4696)
#24 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Listeners/UpdateAssetReferences.php(92): Illuminate\Support\LazyCollection->each(Object(Closure))
#25 /home/unite/releases/20260129113559/vendor/statamic/cms/src/Listeners/UpdateAssetReferences.php(70): Statamic\Listeners\UpdateAssetReferences->replaceReferences(Object(Statamic\Assets\Asset), 'event/ch-spital...', NULL)
#26 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Events/CallQueuedListener.php(113): Statamic\Listeners\UpdateAssetReferences->handleDeleted(Object(Statamic\Events\AssetDeleted))
#27 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\Events\CallQueuedListener->handle(Object(Illuminate\Foundation\Application))
#28 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#29 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))
#30 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#31 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#32 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(129): Illuminate\Container\Container->call(Array)
#33 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(Illuminate\Events\CallQueuedListener))
#34 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Events\CallQueuedListener))
#35 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(133): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#36 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(134): Illuminate\Bus\Dispatcher->dispatchNow(Object(Illuminate\Events\CallQueuedListener), false)
#37 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Queue\CallQueuedHandler->Illuminate\Queue\{closure}(Object(Illuminate\Events\CallQueuedListener))
#38 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(137): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Events\CallQueuedListener))
#39 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(127): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#40 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(68): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\Queue\Jobs\RedisJob), Object(Illuminate\Events\CallQueuedListener))
#41 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\RedisJob), Array)
#42 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(485): Illuminate\Queue\Jobs\Job->fire()
#43 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(435): Illuminate\Queue\Worker->process('redis', Object(Illuminate\Queue\Jobs\RedisJob), Object(Illuminate\Queue\WorkerOptions))
#44 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(201): Illuminate\Queue\Worker->runJob(Object(Illuminate\Queue\Jobs\RedisJob), 'redis', Object(Illuminate\Queue\WorkerOptions))
#45 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(148): Illuminate\Queue\Worker->daemon('redis', 'default', Object(Illuminate\Queue\WorkerOptions))
#46 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(131): Illuminate\Queue\Console\WorkCommand->runWorker('redis', 'default')
#47 /home/unite/releases/20260129113559/vendor/laravel/horizon/src/Console/WorkCommand.php(52): Illuminate\Queue\Console\WorkCommand->handle()
#48 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Laravel\Horizon\Console\WorkCommand->handle()
#49 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#50 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(96): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))
#51 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#52 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Container/Container.php(799): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#53 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Console/Command.php(211): Illuminate\Container\Container->call(Array)
#54 /home/unite/releases/20260129113559/vendor/symfony/console/Command/Command.php(341): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#55 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#56 /home/unite/releases/20260129113559/vendor/symfony/console/Application.php(1102): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#57 /home/unite/releases/20260129113559/vendor/symfony/console/Application.php(356): Symfony\Component\Console\Application->doRunCommand(Object(Laravel\Horizon\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#58 /home/unite/releases/20260129113559/vendor/symfony/console/Application.php(195): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#59 /home/unite/releases/20260129113559/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(198): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#60 /home/unite/releases/20260129113559/artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#61 {main}
Environment
Environment
Application Name: XXXXX
Laravel Version: 12.49.0
PHP Version: 8.2.29
Composer Version: 2.9.4
Environment: local
Debug Mode: ENABLED
URL: XXXXX
Maintenance Mode: OFF
Timezone: UTC
Locale: en
Cache
Config: NOT CACHED
Events: NOT CACHED
Routes: NOT CACHED
Views: NOT CACHED
Drivers
Broadcasting: null
Cache: redis
Database: mysql
Logs: stack / single
Mail: smtp
Queue: redis
Session: file
Storage
public/storage: NOT LINKED
Statamic
Addons: 8
Sites: 12 (Global (English), Germany (German), UK (English), and 9 more)
Stache Watcher: Enabled
Static Caching: Disabled
Version: 5.73.2 PRO
Statamic Addons
edalzell/forma: 3.1.2
robole/advanced-table: 0.0.0
silentz/akismet: 5.1
statamic-rad-pack/runway: 8.9.0
statamic/eloquent-driver: 4.36.0
thoughtco/statamic-cache-tracker: 1.1.0
withcandour/aardvark-seo: 5.0.5
withcandour/statamic-markdown-table: 1.0.0-beta
Statamic Eloquent Driver
Asset Containers: file
Assets: file
Blueprints: file
Collection Trees: file
Collections: file
Entries: eloquent
Fieldsets: file
Form Submissions: file
Forms: file
Global Sets: file
Global Variables: file
Navigation Trees: file
Navigations: file
Revisions: file
Sites: file
Taxonomies: file
Terms: file
Tokens: file
Installation
Fresh statamic/statamic site via CLI
Additional details
I think you will need to come up either some serious optimisation to the traversal in replaceReferences() or allow for chunking the update job (eg. by collection).
- Ngôn ngữ chính
- PHP
- Star
- 4.9k
- Fork
- 647
- Merge trung bình
- 1 ngày 8 giờ
- Pull request đã merge (30 ngày)
- 100
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của statamic/cms
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 1 ngày
-
assets
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Make native filesystem directory permissions configurable to support shared POSIX ACL accessĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
Maintainer thường phản hồi trong vòng 1 ngày
-
accessibility
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
Maintainer thường phản hồi trong vòng 1 ngày
-
antlers
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
Maintainer thường phản hồi trong vòng 1 ngày
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 2 ngày
-
b:1.9 t:enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
Maintainer thường phản hồi trong vòng 3 ngày
-
backend bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100