Problem with hardcoded typo3conf/ext path inside bootstrap.php when using composer-installers >= version 4
ktallafus opened this issue · 5 comments
Bug Report
Current Behavior
When running "vendor/bin/typo3 crawler:processQueue" I get this error:
PHP Warning: include(/var/www/html/vendor/tomasnorre/crawler/cli/bootstrap.php/index.php): Failed to open stream: No such file or directory in /var/www/html/vendor/tomasnorre/crawler/cli/bootstrap.php on line 84
This prevents the indexer from indexing content.
Expected behavior/output
The crawler/indexer should run without this error.
Steps to reproduce
Use typo3/cms-composer-installers >= 4 (eg. v4.0.0-RC1), so that EXT:crawler is installed into vendor folder
run vendor/bin/typo3 crawler:buildQueue
run vendor/bin/typo3 crawler:processQueue
Environment
- Crawler version(s): 11.0.7
- TYPO3 version(s): 11.5.30
- Is your TYPO3 installation set up with Composer (Composer Mode): YES
Possible Solution
The error seems to originate from this line:
https://github.com/tomasnorre/crawler/blob/main/cli/bootstrap.php#L24
In our installation, extensions are installed directly inside vendor folder (using typo3/cms-composer-installers:v4.0.0-RC1). typo3conf/ext does not even exist. The bootstrap script should take that into account.
Hi there, thank you for taking your time to create your first issue. Please give us a bit of time to review it.
This is very much related, not a duplicate, but both issues should be into consideration when creating a solution.
Hi @ktallafus
I have looked a little into this, to see if I can create some sort of quick fix, that doesn't break anything.
The patch below works on my system with compose, and default vendor-dir
and web-dir
[1].
The problem is the second one starts to customize vendor-dir
or web-dir
, or not using composer, then it's not working anymore.
If you have any suggestion on how to fix this. We don't have the DI present, so using the ExtensionManagementUtility::extPath('crawler')
is also not an option.
I already have a function for getting the bin-dir
from composer.json
, https://github.com/tomasnorre/crawler/blob/main/Classes/Service/ProcessService.php#L93, but would prefer not to have duplicate code in the bootstrap.php
Diff
}
$typo3Root = preg_replace('#typo3conf/ext/crawler/cli/bootstrap.php$#', '', $tempPathThisScript);
+$typo3Root = preg_replace('#vendor/tomasnorre/crawler/cli/bootstrap.php$#', '', $typo3Root);
/**
* Second parameter is a base64 encoded serialized array of header data
@@ -81,7 +81,7 @@
}
chdir($typo3Root);
-include($typo3Root . '/index.php');
+include($typo3Root . '/public/index.php');
I just got this error locally when running with direct request.
-- error
Warning: chdir(): Not a directory (errno 20) in /var/www/html/vendor/tomasnorre/crawler/cli/bootstrap.php on line 83 Warning: include(/var/www/html/vendor/tomasnorre/crawler/cli/bootstrap.php/index.php): Failed to open stream: No such file or directory in /var/www/html/vendor/tomasnorre/crawler/cli/bootstrap.php on line 84 Warning: include(): Failed opening '/var/www/html/vendor/tomasnorre/crawler/cli/bootstrap.php/index.php' for inclusion (include_path='.:/usr/share/php') in /var/www/html/vendor/tomasnorre/crawler/cli/bootstrap.php on line 84
which is of cause an error, as bootstrap.php/index.php
cannot be valid.
Workaround
If you are not limited to direct request, the crawler will still work with direct requests
disabled.
I know it's not a proper solution, but at least it's a temporary fix.