Skip to content

Integrity constraint violation: 1062 Duplicate entry '1-book-535' for key 'PRIMARY' #5686

@prohtex

Description

@prohtex

Describe the Bug

I was recently editing a book with a colleague. This book has many pages and chapters. I started to add a page to a chapter (let's call this chapter "Dogs"), and left the "New Page" window open for some time. My colleague continued to add pages during this time.

When I returned to my open window, and saved the page, I was directed to an "Unexpected Error" page. When I returned to the Book, the "Dogs" chapter was missing, and all the pages that were previously sorted under "Dogs" appeared in the root of the book.

What was especially weird is that navigating to the individual page that was previously sorted under "Dogs" still showed the "Dogs" chapter in the navigation, yet clicking on it yielded a Page Not Found.

I then recreated the "Dogs" chapter, and all the pages magically reappeared under the original "Dogs" chapter, which also appeared again.

This is very odd behavior, and I'm trying to determine what caused it, as the integrity of the book data is very important to us.

Here's a sample from the laravel logs:

[2025-06-30 17:59:50] production.ERROR: Failed to send email notification to user [id:3] with error: Connection could not be established with host "localhost:587": stream_socket_client(): Unable to connect to localhost:587 (Connection refused)  
[2025-06-30 18:06:07] production.ERROR: Failed to send email notification to user [id:3] with error: Connection could not be established with host "localhost:587": stream_socket_client(): Unable to connect to localhost:587 (Connection refused)  
[2025-06-30 18:12:22] production.ERROR: Failed to send email notification to user [id:3] with error: Connection could not be established with host "localhost:587": stream_socket_client(): Unable to connect to localhost:587 (Connection refused)  
[2025-06-30 18:13:31] production.ERROR: Failed to send email notification to user [id:3] with error: Connection could not be established with host "localhost:587": stream_socket_client(): Unable to connect to localhost:587 (Connection refused)  
[2025-06-30 18:20:09] production.ERROR: Failed to send email notification to user [id:3] with error: Connection could not be established with host "localhost:587": stream_socket_client(): Unable to connect to localhost:587 (Connection refused)  
[2025-06-30 18:20:55] production.ERROR: Failed to send email notification to user [id:3] with error: Connection could not be established with host "localhost:587": stream_socket_client(): Unable to connect to localhost:587 (Connection refused)  
[2025-06-30 18:24:17] production.ERROR: Failed to send email notification to user [id:3] with error: Connection could not be established with host "localhost:587": stream_socket_client(): Unable to connect to localhost:587 (Connection refused)  
[2025-06-30 18:29:31] production.ERROR: Failed to send email notification to user [id:3] with error: Connection could not be established with host "localhost:587": stream_socket_client(): Unable to connect to localhost:587 (Connection refused)  
[2025-06-30 18:30:56] production.ERROR: Failed to send email notification to user [id:3] with error: Connection could not be established with host "localhost:587": stream_socket_client(): Unable to connect to localhost:587 (Connection refused)  
[2025-06-30 18:37:07] production.ERROR: Failed to send email notification to user [id:3] with error: Connection could not be established with host "localhost:587": stream_socket_client(): Unable to connect to localhost:587 (Connection refused)  
[2025-06-30 18:37:57] production.ERROR: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-535' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (387, page, 3, 1, 3), (387, page, 3, 2, 1), (387, page, 3, 3, 1), (387, page, 3, 4, 1), (535, book, 3, 1, 3), (535, book, 3, 2, 1), (535, book, 3, 3, 1), (535, book, 3, 4, 1), (2, chapter, 3, 1, 3), (2, chapter, 3, 2, 1), (2, chapter, 3, 3, 1), (2, chapter, 3, 4, 1)) {"userId":3,"exception":"[object] (Illuminate\\Database\\UniqueConstraintViolationException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-535' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (387, page, 3, 1, 3), (387, page, 3, 2, 1), (387, page, 3, 3, 1), (387, page, 3, 4, 1), (535, book, 3, 1, 3), (535, book, 3, 2, 1), (535, book, 3, 3, 1), (535, book, 3, 4, 1), (2, chapter, 3, 1, 3), (2, chapter, 3, 2, 1), (2, chapter, 3, 3, 1), (2, chapter, 3, 4, 1)) at /app/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:820)
[stacktrace]
#0 /app/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php(779): Illuminate\\Database\\Connection->runQueryCallback()
#1 /app/www/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(42): Illuminate\\Database\\Connection->run()
#2 /app/www/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3717): Illuminate\\Database\\MySqlConnection->insert()
#3 /app/www/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert()
#4 /app/www/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(32): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}()
#5 /app/www/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(495): Illuminate\\Database\\Connection->transaction()
#6 /app/www/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(361): Illuminate\\Database\\DatabaseManager->__call()
#7 /app/www/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic()
#8 /app/www/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions()
#9 /app/www/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities()
#10 /app/www/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity()
#11 /app/www/app/Entities/Repos/BaseRepo.php(80): BookStack\\Entities\\Models\\Entity->rebuildPermissions()
#12 /app/www/app/Entities/Repos/PageRepo.php(79): BookStack\\Entities\\Repos\\BaseRepo->update()
#13 /app/www/app/Entities/Controllers/PageController.php(125): BookStack\\Entities\\Repos\\PageRepo->publishDraft()
#14 /app/www/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageController->store()
#15 /app/www/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(44): Illuminate\\Routing\\Controller->callAction()
#16 /app/www/vendor/laravel/framework/src/Illuminate/Routing/Route.php(266): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#17 /app/www/vendor/laravel/framework/src/Illuminate/Routing/Route.php(212): Illuminate\\Routing\\Route->runController()
#18 /app/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(808): Illuminate\\Routing\\Route->run()
#19 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(170): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#20 /app/www/app/Http/Middleware/Authenticate.php(23): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#21 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): BookStack\\Http\\Middleware\\Authenticate->handle()
#22 /app/www/app/Http/Middleware/Localization.php(32): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#23 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): BookStack\\Http\\Middleware\\Localization->handle()
#24 /app/www/app/Http/Middleware/RunThemeActions.php(26): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#25 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): BookStack\\Http\\Middleware\\RunThemeActions->handle()
#26 /app/www/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#27 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle()
#28 /app/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(88): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#29 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle()
#30 /app/www/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#31 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle()
#32 /app/www/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#33 /app/www/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
#34 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Session\\Middleware\\StartSession->handle()
#35 /app/www/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#36 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
#37 /app/www/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(75): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#38 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#39 /app/www/app/Http/Middleware/ApplyCspRules.php(33): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#40 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): BookStack\\Http\\Middleware\\ApplyCspRules->handle()
#41 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(127): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#42 /app/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(807): Illuminate\\Pipeline\\Pipeline->then()
#43 /app/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(786): Illuminate\\Routing\\Router->runRouteWithinStack()
#44 /app/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(750): Illuminate\\Routing\\Router->runRoute()
#45 /app/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(739): Illuminate\\Routing\\Router->dispatchToRoute()
#46 /app/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(201): Illuminate\\Routing\\Router->dispatch()
#47 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(170): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#48 /app/www/app/Http/Middleware/PreventResponseCaching.php(28): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#49 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): BookStack\\Http\\Middleware\\PreventResponseCaching->handle()
#50 /app/www/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(58): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#51 /app/www/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#52 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): BookStack\\Http\\Middleware\\TrustProxies->handle()
#53 /app/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#54 /app/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#55 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#56 /app/www/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#57 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Http\\Middleware\\ValidatePostSize->handle()
#58 /app/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(110): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#59 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#60 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(127): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#61 /app/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Pipeline\\Pipeline->then()
#62 /app/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(145): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#63 /app/www/public/index.php(23): Illuminate\\Foundation\\Http\\Kernel->handle()
#64 {main}

[previous exception] [object] (PDOException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-535' for key 'PRIMARY' at /app/www/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php:53)
[stacktrace]
#0 /app/www/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(53): PDOStatement->execute()
#1 /app/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php(812): Illuminate\\Database\\MySqlConnection->Illuminate\\Database\\{closure}()
#2 /app/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php(779): Illuminate\\Database\\Connection->runQueryCallback()
#3 /app/www/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(42): Illuminate\\Database\\Connection->run()
#4 /app/www/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3717): Illuminate\\Database\\MySqlConnection->insert()
#5 /app/www/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert()
#6 /app/www/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(32): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}()
#7 /app/www/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(495): Illuminate\\Database\\Connection->transaction()
#8 /app/www/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(361): Illuminate\\Database\\DatabaseManager->__call()
#9 /app/www/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic()
#10 /app/www/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions()
#11 /app/www/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities()
#12 /app/www/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity()
#13 /app/www/app/Entities/Repos/BaseRepo.php(80): BookStack\\Entities\\Models\\Entity->rebuildPermissions()
#14 /app/www/app/Entities/Repos/PageRepo.php(79): BookStack\\Entities\\Repos\\BaseRepo->update()
#15 /app/www/app/Entities/Controllers/PageController.php(125): BookStack\\Entities\\Repos\\PageRepo->publishDraft()
#16 /app/www/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageController->store()
#17 /app/www/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(44): Illuminate\\Routing\\Controller->callAction()
#18 /app/www/vendor/laravel/framework/src/Illuminate/Routing/Route.php(266): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#19 /app/www/vendor/laravel/framework/src/Illuminate/Routing/Route.php(212): Illuminate\\Routing\\Route->runController()
#20 /app/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(808): Illuminate\\Routing\\Route->run()
#21 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(170): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#22 /app/www/app/Http/Middleware/Authenticate.php(23): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#23 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): BookStack\\Http\\Middleware\\Authenticate->handle()
#24 /app/www/app/Http/Middleware/Localization.php(32): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#25 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): BookStack\\Http\\Middleware\\Localization->handle()
#26 /app/www/app/Http/Middleware/RunThemeActions.php(26): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#27 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): BookStack\\Http\\Middleware\\RunThemeActions->handle()
#28 /app/www/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#29 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle()
#30 /app/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(88): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#31 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle()
#32 /app/www/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#33 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle()
#34 /app/www/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#35 /app/www/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
#36 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Session\\Middleware\\StartSession->handle()
#37 /app/www/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#38 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
#39 /app/www/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(75): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#40 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#41 /app/www/app/Http/Middleware/ApplyCspRules.php(33): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#42 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): BookStack\\Http\\Middleware\\ApplyCspRules->handle()
#43 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(127): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#44 /app/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(807): Illuminate\\Pipeline\\Pipeline->then()
#45 /app/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(786): Illuminate\\Routing\\Router->runRouteWithinStack()
#46 /app/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(750): Illuminate\\Routing\\Router->runRoute()
#47 /app/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(739): Illuminate\\Routing\\Router->dispatchToRoute()
#48 /app/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(201): Illuminate\\Routing\\Router->dispatch()
#49 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(170): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#50 /app/www/app/Http/Middleware/PreventResponseCaching.php(28): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#51 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): BookStack\\Http\\Middleware\\PreventResponseCaching->handle()
#52 /app/www/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(58): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#53 /app/www/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#54 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): BookStack\\Http\\Middleware\\TrustProxies->handle()
#55 /app/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#56 /app/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#57 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#58 /app/www/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#59 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Http\\Middleware\\ValidatePostSize->handle()
#60 /app/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(110): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#61 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#62 /app/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(127): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#63 /app/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Pipeline\\Pipeline->then()
#64 /app/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(145): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#65 /app/www/public/index.php(23): Illuminate\\Foundation\\Http\\Kernel->handle()
#66 {main}
"} 
[2025-06-30 18:37:57] production.ERROR: Failed to send email notification to user [id:3] with error: Connection could not be established with host "localhost:587": stream_socket_client(): Unable to connect to localhost:587 (Connection refused)  
[2025-06-30 18:47:30] production.ERROR: Failed to send email notification to user [id:3] with error: Connection could not be established with host "localhost:587": stream_socket_client(): Unable to connect to localhost:587 (Connection refused)  
[2025-06-30 18:47:53] production.ERROR: Failed to send email notification to user [id:3] with error: Connection could not be established with host "localhost:587": stream_socket_client(): Unable to connect to localhost:587 (Connection refused)  
[2025-06-30 18:53:40] production.ERROR: Failed to send email notification to user [id:3] with error: Connection could not be established with host "localhost:587": stream_socket_client(): Unable to connect to localhost:587 (Connection refused)  
[2025-06-30 18:56:41] production.ERROR: Failed to send email notification to user [id:3] with error: Connection could not be established with host "localhost:587": stream_socket_client(): Unable to connect to localhost:587 (Connection refused)  
[2025-06-30 19:02:42] production.ERROR: Failed to send email notification to user [id:3] with error: Connection could not be established with host "localhost:587": stream_socket_client(): Unable to connect to localhost:587 (Connection refused)  

Steps to Reproduce

Concurrent creation of pages by multiple users

Expected Behaviour

Pages are created

Screenshots or Additional Context

No response

Browser Details

No response

Exact BookStack Version

BookStack v25.05.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions