Magento 最新版本 2.4.7-p1,无法添加产品,降级到 2.4.6-p6

更新日期: 2024-06-19 阅读次数: 944 字数: 646 分类: magento

好不容易,用 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 2.4.7 Connect to elasticsearch8 and Not see the products on UI. · Issue #38676 · magento/magento2 (github.com)

安装时的问题

因为我之前在安装 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 聊聊, 查看更多联系方式