Sulu,尝试保存页面 / post 时出现与哈希相关的奇怪错误?

Sulu, strange hash related error when trying to save page / post?

直到最近一切都运行良好。现在,当我尝试保存(创建或更新)任何页面或 post 时,我在表单顶部收到错误消息“错误 - 尝试保存表单时出错”。

在错误日志中我看到这个错误:

“未捕获 PHP 异常 Sulu\Component\Rest\Exception\InvalidHashException:“类型为“Sulu\Bundle\ArticleBundle\Document\ArticleDocument”且 ID 为“9e0720a7-5565-4a6f-”的实体的给定散列a735-8a186b8fef9b” 与当前哈希值不匹配。该实体可能同时被编辑过。”在 /var/www/html/vendor/sulu/sulu/src/Sulu/Component/Hash/RequestHashChecker.php 第 53 行“

尝试从管理员清除 symfony 缓存、网站缓存,重新启动 docker 个容器。

我完全不知道我做了什么导致了这个错误。请帮忙。

更新:我刚刚注意到一件奇怪的事。当我尝试保存一些文章时出现该错误并返回概览页面(即列出该类型的所有文章)然后我看到未更改的文章标题。但是当我单击编辑它时,我看到更改的标题?!?概览页面上的标题和编辑页面上的标题不是在同一个地方使用的吗?这怎么可能?

更新:

现在,即使我从头开始保存文章再设置一次项目也会导致该错误。更多信息:

在堆栈跟踪中,最后执行的命令是:

in vendor/elasticsearch/elasticsearch/src/Elasticsearch/ConnectionPool/StaticNoPingConnectionPool.php (line 64)

它会弹出 “在您的集群中找不到活动节点”

当我在执行时设置项目:

php bin/console ongr:es:index:create

我收到错误:

{"error":{"root_cause":[{"type":"resource_already_exists_exception","reason  
  ":"index [su_articles/sWs5F1uzSFO8bFiZqF1Egw] already exists","index_uuid":  
  "sWs5F1uzSFO8bFiZqF1Egw","index":"su_articles"}],"type":"resource_already_e  
  xists_exception","reason":"index [su_articles/sWs5F1uzSFO8bFiZqF1Egw] alrea  
  dy exists","index_uuid":"sWs5F1uzSFO8bFiZqF1Egw","index":"su_articles"},"st  
  atus":400} 

而当我 运行:

php bin/console ongr:es:index:create --manager=live

我得到类似的:

In Connection.php line 675:
  {"error":{"root_cause":[{"type":"resource_already_exists_exception","reason":"index [su_articles_live/Pissm9ycRj-o79K4wrrD  
  AA] already exists","index_uuid":"Pissm9ycRj-o79K4wrrDAA","index":"su_articles_live"}],"type":"resource_already_exists_exc  
  eption","reason":"index [su_articles_live/Pissm9ycRj-o79K4wrrDAA] already exists","index_uuid":"Pissm9ycRj-o79K4wrrDAA","i  
  ndex":"su_articles_live"},"status":400} 

还要提一下,现在可以保存页面,但不能保存文章。

在以下情况下可能会发生错误。

  • 预期案例其他人确实像您一样编辑了同一篇文章并保存了它
  • 意外情况您的 phpcr 缓存不同步
  • 意外情况您有一个多服务器设置,但您的 cache.app 未配置为使用中央缓存

因此,如果首先是意外情况之一,您应该通过以下方式清除 cache.pools:

bin/console cache:pool:prune

如果您有一个多服务器设置,请确保配置一个中央缓存。在这种情况下,大多数情况下使用您在 cache.yaml 中配置的 redis-server 例如:

# config/packages/prod/cache.yaml
framework:
    cache:
        default_redis_provider: "%env(resolve:REDIS_DSN)%"
        app: cache.adapter.redis

还要确保您使用的是最新版本,并且可能会根据 sulu/skeleton: https://github.com/sulu/skeleton/blob/2.x/config/packages/prod/sulu_document_manager.yaml 更新您的 phpcr 缓存配置,当您的情况下性能无关紧要时,您可以禁用phpcr 缓存,我不推荐。

这为我解决了创建 ElasticSearch 索引的问题:

php bin/console ongr:es:index:drop --force