picocms / Pico

Pico is a stupidly simple, blazing fast, flat file CMS.
http://picocms.org/
MIT License
3.81k stars 616 forks source link

Fatal error after composer install #598

Closed dipohl closed 2 years ago

dipohl commented 2 years ago

Environment:

Installation with composer

# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

# php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Installer verified
php composer-setup.php --version=1.10.22
All settings correct for using Composer
Downloading...

Composer (version 1.10.22) successfully installed to: /usr/share/nginx/html/composer.phar
Use it: php composer.phar

# php composer.phar create-project picocms/pico-composer pico
Creating a "picocms/pico-composer" project at "./pico"
Warning from https://repo.packagist.org: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2. See https://blog.packagist.com/deprecating-composer-1-support/
Installing picocms/pico-composer (v2.1)
  - Installing picocms/pico-composer (v2.1): Loading from cache
Created project in /usr/share/nginx/html/pico
Loading composer repositories with package information
Warning from https://repo.packagist.org: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2. See https://blog.packagist.com/deprecating-composer-1-support/
Updating dependencies (including require-dev)
Package operations: 9 installs, 0 updates, 0 removals
  - Installing picocms/composer-installer (v1.0.1): Loading from cache
  - Installing erusev/parsedown (1.8.0-beta-7): Loading from cache
  - Installing erusev/parsedown-extra (0.8.1): Loading from cache
  - Installing symfony/polyfill-ctype (v1.23.0): Loading from cache
  - Installing symfony/yaml (v2.8.52): Loading from cache
  - Installing twig/twig (v1.44.4): Loading from cache
  - Installing picocms/pico (v2.1.0): Loading from cache
  - Installing picocms/pico-deprecated (v2.1.0): Loading from cache
  - Installing picocms/pico-theme (v2.1.0): Loading from cache
Writing lock file
Generating autoload files
> Pico\Composer\Installer\PluginInstaller::postAutoloadDump
Creating Pico plugins file
2 packages you are using are looking for funding.
Use the `composer fund` command to find out more!

Got a blank page website and the following error messages in nginx error log:

2021/08/14 18:20:37 [error] 475353#0: *4 FastCGI sent in stderr: 
PHP message: PHP Notice:  Undefined index: text in /usr/share/nginx/html/pico/vendor/erusev/parsedown-extra/ParsedownExtra.php on line 213
PHP message: PHP Notice:  Undefined index: text in /usr/share/nginx/html/pico/vendor/erusev/parsedown-extra/ParsedownExtra.php on line 213
PHP message: PHP Notice:  Undefined index: markup in /usr/share/nginx/html/pico/vendor/erusev/parsedown-extra/ParsedownExtra.php on line 232
PHP message: PHP Warning:  DOMDocument::loadHTML(): Empty string supplied as input in /usr/share/nginx/html/pico/vendor/erusev/parsedown-extra/ParsedownExtra.php on line 483
PHP message: PHP Fatal error:  Uncaught TypeError: Argument 1 passed to DOMNode::removeChild() must be an instance of DOMNode, null given in /usr/share/nginx/html/pico/vendor/erusev/parsedown-extra/ParsedownExtra.php:484
Stack trace:
#0 /usr/share/nginx/html/pico/vendor/erusev/parsedown-extra/ParsedownExtra.php(484): DOMNode->removeChild()
#1 /usr/share/nginx/html/pico/vendor/erusev/parsedown-extra/ParsedownExtra.php(232): ParsedownExtra->processTag()
#2 /usr/share/nginx/html/pico/vendor/erusev/parsedown/Parsedown.php(221): ParsedownExtra->blockMarkupComplete()
#3 /usr/share/nginx/html/pico/vendor/erusev/parsedown/Parsedown.php(52): Parsedown->linesElements()
#4 /usr/share/nginx/html/pico/vendor/erusev/parsedown/Parsedown.php(26): Parsedown->textElements()
#5 /usr/share/nginx/html/pico/vendor/erusev/parsedown-extra/ParsedownExtra.php(46): Parsedown->text()
#6 /usr/share/nginx/html/pico/vendor/picocms/pico/lib/Pico.php(1661): ParsedownExtra->text()
#7 /usr/share/nginx/html/pico/vendor/picocms/pico/" while reading response header from upstream, client: XX.XX.XX.XX, server: example.org, request: "GET / HTTP/2.0", upstream: "fastcgi://127.0.0.1:9000", host: "example.org"`
dipohl commented 2 years ago

Same was reported before from other peoples in (unfortunately closed without fixing) issue https://github.com/picocms/Pico/issues/525

I was glad to find this via internet search as the recipe "install from archive not with composer" also worked for me.

dipohl commented 2 years ago

My first try with current composer version 2.x following your installation docs brought an alarming warning, therefore I tried with the older composer version 1.x as described above.

Loading "picocms/composer-installer" which is a legacy composer-installer built for Composer 1.x, it is likely to cause issues as you are running Composer 2.x.

PhrozenByte commented 2 years ago

The dependencies are wrong. I'm not sure why, because Pico's composer.json is specifically pinning down Parsedown Extra 0.8.0-beta.1 - the installed Parsedown Extra 0.8.1 is not compatible with Parsedown 1.8.0-beta-7 (yeah, it's a total mess on Parsedown's side...). Not sure why Composer is doing this, it contradicts the version constraint. Can you please check the Pico version installed via Composer? Either check your composer.lock and search for version below the picocms/Pico package, or check Pico's VERSION constant in vendor/picocms/pico/lib/Pico.php.

PhrozenByte commented 2 years ago

We did some research via IRC and it isn't reproducible. It looks like Composer sometimes chooses to install Pico v2.1.0 instead of the latest Pico 2.1 version (Pico 2.1.4 right now), causing the issues reported. After clearing caches it started working for @dipohl, too. Thank you very much for your time and help @dipohl! :heart:

So, for everyone else experiencing this issue: You can force Composer to install Pico v2.1.4 (or later - please check Pico's latest version first and update the following command accordingly). After you've executed composer create-project change into Pico's install directory (cd /var/www/html/pico/) and execute the following: composer require picocms/pico ^2.1.4

If this fails, too, use one of Pico's pre-bundled releases (instructions) instead. By using a pre-bundled release you end up with the exact same setup, i.e. you can still follow the "I've used Composer to install Pico" instructions later.

Duplicate of #525

github-actions[bot] commented 2 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed in two days if no further activity occurs. Thank you for your contributions! :+1: