BookStack icon indicating copy to clipboard operation
BookStack copied to clipboard

Update to v25.11.4 fails with composer error

Open bjinthahouse opened this issue 1 month ago • 3 comments

Describe the Bug

Trying to update my bookstack instance from v25.07.2 to v25.11.4, like I've done a dozen times, with instructions found here.

I'm running bookstack in a lxc container on proxmox based on Debian Trixie, newest Apache version and PHP 8.4 with fpm.

  • git pull origin release works as expected.
  • composer install --no-dev takes forever, which I have thought nothing of, since it's mentioned in the docs, that there are major database changes. This command finishes with an error:
The following exception is caused by a process timeout
Check https://getcomposer.org/doc/06-config.md#process-timeout for details

In Process.php line 1205:
                                                                                                                                                                            
  [Symfony\Component\Process\Exception\ProcessTimedOutException]                                                                                                            
  The process "'/usr/bin/php8.4' -d allow_url_fopen='1' -d disable_functions='' -d memory_limit='-1' artisan package:discover --ansi" exceeded the timeout of 300 seconds.

As the error suggests ( https://getcomposer.org/doc/06-config.md#process-timeout ) I increased the timeout to 15 minutes. With the same outcome.

But the installation seems to continue. So I send php artisan migrate. This fails with SQLSTATE[HY000] [2002] Connection refused (Connection: mysql, SQL: alter table page_revisionsmodifypage_id bigint unsigned not null)

More below.

Steps to Reproduce

  1. Goto install directory
  2. git pull origin release
  3. composer install --no-dev
  4. php artisan migrate

Expected Behaviour

Update goes through as usual.

Screenshots or Additional Context

This is the console output up until the error:

composer install --no-dev -v
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]? yes
> pre-install-cmd: @php -r "!file_exists('bootstrap/cache/services.php') || @unlink('bootstrap/cache/services.php');"
Installing dependencies from lock file
Verifying lock file contents can be installed on current platform.
Dependency resolution completed in 0.000 seconds
Package operations: 2 installs, 42 updates, 1 removal
Installs: symfony/polyfill-php85:v1.33.0, symfony/polyfill-php84:v1.33.0
Updates: dasprid/enum:1.0.7, bacon/bacon-qr-code:v3.0.3, dompdf/dompdf:v3.1.4, dragonmantank/cron-expression:v3.6.0, symfony/http-foundation:v7.3.7, symfony/process:v7.3.4, symfony/string:v7.3.4, symfony/service-contracts:v3.6.1, symfony/console:v7.3.6, laravel/prompts:v0.3.8, laravel/serializable-closure:v2.0.7, paragonie/constant_time_encoding:v3.1.3, phpseclib/phpseclib:3.0.47, symfony/css-selector:v7.3.6, symfony/var-dumper:v7.3.5, symfony/routing:v7.3.6, symfony/mime:v7.3.4, symfony/event-dispatcher:v7.3.3, symfony/mailer:v7.3.5, symfony/error-handler:v7.3.6, symfony/http-kernel:v7.3.7, symfony/finder:v7.3.5, brick/math:0.14.1, ramsey/uuid:4.9.1, nunomaduro/termwind:v2.3.3, symfony/translation-contracts:v3.6.1, symfony/translation:v7.3.4, nesbot/carbon:3.10.3, league/uri-interfaces:7.6.0, league/uri:7.6.0, league/flysystem-local:3.30.2, league/flysystem:3.30.2, nette/utils:v4.0.9, nette/schema:v1.3.3, laravel/framework:v12.40.1, laravel/socialite:v5.23.2, nikic/php-parser:v5.6.2, psy/psysh:v0.12.14, laravel/tinker:v2.10.2, aws/aws-sdk-php:3.363.2, league/flysystem-aws-s3-v3:3.30.1, predis/predis:v3.3.0
Removals: webmozart/assert
  - Downloading dasprid/enum (1.0.7)
  - Downloading bacon/bacon-qr-code (v3.0.3)
  - Downloading dompdf/dompdf (v3.1.4)
  - Downloading dragonmantank/cron-expression (v3.6.0)
  - Syncing symfony/http-foundation (v7.3.7) into cache
  - Downloading symfony/process (v7.3.4)
  - Downloading symfony/string (v7.3.4)
  - Downloading symfony/service-contracts (v3.6.1)
  - Downloading symfony/console (v7.3.6)
  - Downloading laravel/prompts (v0.3.8)
  - Downloading laravel/serializable-closure (v2.0.7)
  - Downloading paragonie/constant_time_encoding (v3.1.3)
  - Downloading phpseclib/phpseclib (3.0.47)
  - Downloading symfony/css-selector (v7.3.6)
  - Downloading symfony/var-dumper (v7.3.5)
  - Downloading symfony/routing (v7.3.6)
  - Downloading symfony/polyfill-php85 (v1.33.0)
  - Downloading symfony/polyfill-php84 (v1.33.0)
  - Downloading symfony/mime (v7.3.4)
  - Downloading symfony/event-dispatcher (v7.3.3)
  - Downloading symfony/mailer (v7.3.5)
  - Downloading symfony/error-handler (v7.3.6)
  - Downloading symfony/http-kernel (v7.3.7)
  - Downloading symfony/finder (v7.3.5)
  - Downloading brick/math (0.14.1)
  - Downloading ramsey/uuid (4.9.1)
  - Downloading nunomaduro/termwind (v2.3.3)
  - Downloading symfony/translation-contracts (v3.6.1)
  - Downloading symfony/translation (v7.3.4)
  - Downloading nesbot/carbon (3.10.3)
  - Downloading league/uri-interfaces (7.6.0)
  - Downloading league/uri (7.6.0)
  - Downloading league/flysystem-local (3.30.2)
  - Downloading league/flysystem (3.30.2)
  - Downloading nette/utils (v4.0.9)
  - Downloading nette/schema (v1.3.3)
  - Downloading laravel/framework (v12.40.1)
  - Downloading laravel/socialite (v5.23.2)
  - Downloading nikic/php-parser (v5.6.2)
  - Downloading psy/psysh (v0.12.14)
  - Downloading laravel/tinker (v2.10.2)
  - Downloading aws/aws-sdk-php (3.363.2)
  - Downloading league/flysystem-aws-s3-v3 (3.30.1)
  - Downloading predis/predis (v3.3.0)
  - Removing webmozart/assert (1.11.0)
  - Upgrading dasprid/enum (1.0.6 => 1.0.7): Extracting archive
  - Upgrading bacon/bacon-qr-code (v3.0.1 => v3.0.3): Extracting archive
  - Upgrading dompdf/dompdf (v3.1.0 => v3.1.4): Extracting archive
  - Upgrading dragonmantank/cron-expression (v3.4.0 => v3.6.0): Extracting archive
  - Upgrading symfony/http-foundation (v7.3.2 => v7.3.7): Checking out db488a62f98f7a81d5746f05eea63a74e55bb7c4 from cache
    Pulling in changes:
      db488a62 - Nicolas Grekas: Merge branch '6.4' into 7.3
      b03d11e0 - Nicolas Grekas: Merge branch '5.4' into 6.4
      6379e490 - Nicolas Grekas: Merge branch '6.4' into 7.3
      1ba1d5fe - Nicolas Grekas: [HttpFoundation] Fix parsing hosts and schemes in URLs
      1a0706e8 - Nicolas Grekas: [HttpFoundation] Fix parsing pathinfo with no leading slash
      c8ab9b62 - Nicolas Grekas: Merge branch '6.4' into 7.3
      ee930094 - Dave Long: [HttpFoundation] Allow Request::setFormat() to override predefined formats
      ce31218c - Santiago San Martin: [HttpFoundation] Fix issue where ServerEvent with "0" data is not sent
      c061c7c1 - Nicolas Grekas: Merge branch '6.4' into 7.3
      36924159 - Nicolas Grekas: Fix ord()-related PHP 8.5 deprecations
      79ec7c41 - Christian Flothmann: Merge branch '6.4' into 7.3
      67729f83 - Christian Flothmann: use the empty string instead of null as an array offset
      271459da - Nicolas Grekas: Merge branch '6.4' into 7.3
      e8688810 - Matt Emerson: SQLSRV: Change column type from TEXT to STRING
      7475561e - Nicolas Grekas: Merge branch '6.4' into 7.3
      6bc974c0 - Christian Flothmann: fix session cookie options assertions on PHP 8.5
  - Upgrading symfony/process (v7.3.0 => v7.3.4): Extracting archive
  - Upgrading symfony/string (v7.3.2 => v7.3.4): Extracting archive
  - Upgrading symfony/service-contracts (v3.6.0 => v3.6.1): Extracting archive
  - Upgrading symfony/console (v7.3.2 => v7.3.6): Extracting archive
  - Upgrading laravel/prompts (v0.3.6 => v0.3.8): Extracting archive
  - Upgrading laravel/serializable-closure (v2.0.4 => v2.0.7): Extracting archive
  - Upgrading paragonie/constant_time_encoding (v3.0.0 => v3.1.3): Extracting archive
  - Upgrading phpseclib/phpseclib (3.0.46 => 3.0.47): Extracting archive
  - Upgrading symfony/css-selector (v7.3.0 => v7.3.6): Extracting archive
  - Upgrading symfony/var-dumper (v7.3.2 => v7.3.5): Extracting archive
  - Upgrading symfony/routing (v7.3.2 => v7.3.6): Extracting archive
  - Installing symfony/polyfill-php85 (v1.33.0): Extracting archive
  - Installing symfony/polyfill-php84 (v1.33.0): Extracting archive
  - Upgrading symfony/mime (v7.3.2 => v7.3.4): Extracting archive
  - Upgrading symfony/event-dispatcher (v7.3.0 => v7.3.3): Extracting archive
  - Upgrading symfony/mailer (v7.3.2 => v7.3.5): Extracting archive
  - Upgrading symfony/error-handler (v7.3.2 => v7.3.6): Extracting archive
  - Upgrading symfony/http-kernel (v7.3.2 => v7.3.7): Extracting archive
  - Upgrading symfony/finder (v7.3.2 => v7.3.5): Extracting archive
  - Upgrading brick/math (0.12.3 => 0.14.1): Extracting archive
  - Upgrading ramsey/uuid (4.9.0 => 4.9.1): Extracting archive
  - Upgrading nunomaduro/termwind (v2.3.1 => v2.3.3): Extracting archive
  - Upgrading symfony/translation-contracts (v3.6.0 => v3.6.1): Extracting archive
  - Upgrading symfony/translation (v7.3.2 => v7.3.4): Extracting archive
  - Upgrading nesbot/carbon (3.10.2 => 3.10.3): Extracting archive
  - Upgrading league/uri-interfaces (7.5.0 => 7.6.0): Extracting archive
  - Upgrading league/uri (7.5.1 => 7.6.0): Extracting archive
  - Upgrading league/flysystem-local (3.30.0 => 3.30.2): Extracting archive
  - Upgrading league/flysystem (3.30.0 => 3.30.2): Extracting archive
  - Upgrading nette/utils (v4.0.8 => v4.0.9): Extracting archive
  - Upgrading nette/schema (v1.3.2 => v1.3.3): Extracting archive
  - Upgrading laravel/framework (v11.45.2 => v12.40.1): Extracting archive
  - Upgrading laravel/socialite (v5.23.0 => v5.23.2): Extracting archive
  - Upgrading nikic/php-parser (v5.6.1 => v5.6.2): Extracting archive
  - Upgrading psy/psysh (v0.12.10 => v0.12.14): Extracting archive
  - Upgrading laravel/tinker (v2.10.1 => v2.10.2): Extracting archive
  - Upgrading aws/aws-sdk-php (3.356.6 => 3.363.2): Extracting archive
  - Upgrading league/flysystem-aws-s3-v3 (3.29.0 => 3.30.1): Extracting archive
  - Upgrading predis/predis (v2.4.0 => v3.3.0): Extracting archive
Generating optimized autoload files
> post-autoload-dump: Illuminate\Foundation\ComposerScripts::postAutoloadDump
> post-autoload-dump: @php artisan package:discover --ansi

The following exception is caused by a process timeout
Check https://getcomposer.org/doc/06-config.md#process-timeout for details

In Process.php line 1205:
                                                                                                                                                                            
  [Symfony\Component\Process\Exception\ProcessTimedOutException]                                                                                                            
  The process "'/usr/bin/php8.4' -d allow_url_fopen='1' -d disable_functions='' -d memory_limit='-1' artisan package:discover --ansi" exceeded the timeout of 300 seconds.  
                                                                                                                                                                            

Exception trace:
  at phar:///usr/local/bin/composer/vendor/symfony/process/Process.php:1205
 Symfony\Component\Process\Process->checkTimeout() at phar:///usr/local/bin/composer/vendor/symfony/process/Process.php:437
 Symfony\Component\Process\Process->wait() at phar:///usr/local/bin/composer/vendor/symfony/process/Process.php:255
 Symfony\Component\Process\Process->run() at phar:///usr/local/bin/composer/src/Composer/Util/ProcessExecutor.php:167
 Composer\Util\ProcessExecutor->runProcess() at phar:///usr/local/bin/composer/src/Composer/Util/ProcessExecutor.php:212
 Composer\Util\ProcessExecutor->doExecute() at phar:///usr/local/bin/composer/src/Composer/Util/ProcessExecutor.php:111
 Composer\Util\ProcessExecutor->executeTty() at phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php:464
 Composer\EventDispatcher\EventDispatcher->executeTty() at phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php:421
 Composer\EventDispatcher\EventDispatcher->doDispatch() at phar:///usr/local/bin/composer/src/Composer/EventDispatcher/EventDispatcher.php:139
 Composer\EventDispatcher\EventDispatcher->dispatchScript() at phar:///usr/local/bin/composer/src/Composer/Autoload/AutoloadGenerator.php:473
 Composer\Autoload\AutoloadGenerator->dump() at phar:///usr/local/bin/composer/src/Composer/Installer.php:362
 Composer\Installer->run() at phar:///usr/local/bin/composer/src/Composer/Command/InstallCommand.php:147
 Composer\Command\InstallCommand->execute() at phar:///usr/local/bin/composer/vendor/symfony/console/Command/Command.php:298
 Symfony\Component\Console\Command\Command->run() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:1040
 Symfony\Component\Console\Application->doRunCommand() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:301
 Symfony\Component\Console\Application->doRun() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:397
 Composer\Console\Application->doRun() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:171
 Symfony\Component\Console\Application->run() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:137
 Composer\Console\Application->run() at phar:///usr/local/bin/composer/bin/composer:98
 require() at /usr/local/bin/composer:29

install [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--dry-run] [--download-only] [--dev] [--no-suggest] [--no-dev] [--no-autoloader] [--no-progress] [--no-install] [--audit] [--audit-format AUDIT-FORMAT] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--apcu-autoloader-prefix APCU-AUTOLOADER-PREFIX] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--] [<packages>...]
php artisan migrate

                                                                                                                                                                                  
                                                                            APPLICATION IN PRODUCTION.                                                                            
                                                                                                                                                                                  

 ┌ Are you sure you want to run this command? ──────────────────┐
 │ Yes                                                          │
 └──────────────────────────────────────────────────────────────┘

   INFO  Running migrations.  

  2025_09_02_111542_remove_unused_columns ............................................................................................ 131.88ms DONE
  2025_09_15_132850_create_entities_table ............................................................................................ 355.63ms DONE
  2025_09_15_134701_migrate_entity_data .............................................................................................. 851.67ms DONE
  2025_09_15_134751_update_entity_relation_columns ..................................................................................... 1m 39s FAIL

In Connection.php line 824:
                                                                                                                                              
  SQLSTATE[HY000] [2002] Connection refused (Connection: mysql, SQL: alter table `page_revisions` modify `page_id` bigint unsigned not null)  
                                                                                                                                              

In Connector.php line 67:
                                             
  SQLSTATE[HY000] [2002] Connection refused  

Browser Details

Probably not relevant: Version 142.0.7444.176 (Official Build) (64-Bit) on Windows 10

Exact BookStack Version

v25.07.2

bjinthahouse avatar Dec 02 '25 17:12 bjinthahouse

Interestingly enough, Bookstack seems to be working for the moment. And the version number has also been updated:

But still I'm wondering if everything is working as expected and if there are any implications resulting from the errors mentioned above? Also: What lead to the above errors?

bjinthahouse avatar Dec 02 '25 18:12 bjinthahouse

Ok, so I got excited too early.. No matter which page I open, I get the following error:

Image

I can open shelves and books, but pages give me this error.. I'll restore my snapshot, but now the update has officially failed.

bjinthahouse avatar Dec 02 '25 21:12 bjinthahouse

Hi @bjinthahouse,

As the error suggests ( https://getcomposer.org/doc/06-config.md#process-timeout ) I increased the timeout to 15 minutes. With the same outcome.

Does it take 15 minutes then fail? Or fail much earlier? I see it's attempting to download one package via git instead of direct download, which is odd (sometimes seen when GitHub blocks downloads via rate-limiting), and maybe adding time, but I wouldn't expect much.

We do have an alternative to using composer which you may have better luck with: https://www.bookstackapp.com/blog/php-dependency-improvements/ (also mentioned on our updates page in a dropdown)

Hard to say about the database issues. It appears to get half-way through the attempted migration before failing, which is odd, especially with a "Connection refused" message. Potentially could be something odd caused by the composer process not finishing, although I wouldn't be confident about that.

Any chance networking/internet is unreliable in this environment? It's the only thing that comes to mind thinking about scenarios which may lead to these two issues.

ssddanbrown avatar Dec 02 '25 22:12 ssddanbrown