好不容易,用 docker 搭建好了最新版的 Magento 2.4.7-p1。但是登录后台之后,发现无法创建产品,也有一些后台显示的问题。这就尴尬了。。。
2.4.7-p1 的问题日志
查看日志 var/log/exception.log
[2024-06-18] main.CRITICAL: Elasticsearch\Common\Exceptions\BadRequest400Exception: {"error":"no handler found for uri [/magento2_product_1_v1/document/_bulk?refresh=true] and method [POST]"} vendor/elasticsearch/elasticsearch/src/Elasticsearch/Connections/Connection.php:693
参考官方 Github Issue 中的讨论,确实存在这个问题,而且是三周前还在讨论,估计是没有修复。
安装时的问题
因为我之前在安装 magento 时,设置了 search-engine=elasticsearch8,但是报错
Could not validate a connection to Elasticsearch. No alive nodes found in your cluster
而官方问题也没有提到 elasticsearch8,只提到了 elasticsearch7,我幼稚地以为“即便你用的是 elasticsearch 8 版本,这里也需要写成 7.”。所以修改为:
--search-engine=elasticsearch7
居然就能安装通过了。大概率是这里导致的问题。
尝试手动修复
首先安装 magento 2 Elasticsearch 8 Module:
composer require magento/module-elasticsearch-8 --with-all-dependencies
会看到,之前确实安装的是 Elasticsearch7 模块,而非 ES8。
Removing Magento/Elasticsearch7
- Installing php-http/discovery (1.19.4): Extracting archive
- Upgrading webonyx/graphql-php (v15.12.2 => v15.12.3): Extracting archive
- Downgrading psr/http-message (2.0 => 1.1): Extracting archive
- Upgrading laminas/laminas-validator (2.57.0 => 2.58.0): Extracting archive
- Upgrading laminas/laminas-code (4.13.0 => 4.14.0): Extracting archive
- Upgrading aws/aws-sdk-php (3.314.2 => 3.314.3): Extracting archive
- Upgrading phpseclib/phpseclib (3.0.37 => 3.0.38): Extracting archive
- Installing php-http/promise (1.3.1): Extracting archive
- Installing php-http/httplug (2.4.0): Extracting archive
- Installing elastic/transport (v8.8.0): Extracting archive
- Upgrading elasticsearch/elasticsearch (v7.17.2 => v8.5.3): Extracting archive
- Installing magento/module-elasticsearch-8 (100.4.1): Extracting archive
通过命令行修改默认的 search engine 为 elasticsearch 8 (还可以通过 admin web 后台修改,但是这个版本有 bug,后面会提到)
bin/magento config:set catalog/search/engine 'elasticsearch8'
重新 setup 使修改生效:
bin/magento setup:di:compile
但是,又回到了之前安装时的错误:
[2024-06-18] main.CRITICAL: Magento\Framework\Exception\LocalizedException: Could not ping search engine: No alive nodes found in your cluster in vendor/magento/module-elasticsearch/Model/Adapter/Elasticsearch.php:268
后台配置 ES 的问题
在 magento 的后台,stores - configuration - catalog - catalog search
里面 Search Engine 只有 OpenSearch 选项,没有 es7 的选项,更没有 es8 选项。。。
大无语。还是回到那个 github issue 里讨论的,这个版本有问题。
要么切换到 opensearch ,或者降级到更稳定的 2.4.6-p6 版本。算了还是降级到 2.4.6-p6 版本吧,主要是担心 opensearch 的性能不行。
需要重新部署的地方
- PHP 由 8.3 降级到 8.2
- Composer 由 2.7 降级到 2.2
- Elasticsearch 由 8.11 降级到 7.17。虽然官方写的支持 8.11,但是官方安装文档默认是 ES 7 的设置,我感觉都没认真测试过 ES 8。估计 OpenSearch 测试的比较多。
- Redis 由 7.2 降级到 7.0
- Magento 由 2.4.7-p1 降级到 2.4.6-p6
- MySQL 保持 8.0 不变
将 docker-compose.yml 文件修改一下。
注意,phpfpm 的镜像名称改一下,否则还是使用的之前的缓存。
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式