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
直到最近一切都运行良好。现在,当我尝试保存(创建或更新)任何页面或 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