徽章图片丢失问题

你好,

我在徽章部分遇到了问题。我修改了一些徽章并添加了一些图片;6个月后,我恢复了一个备份,除了徽章部分,一切都正常工作。我尝试以安全模式登录并禁用所有插件……但问题仍然一样,如何恢复具有默认名称和图片的徽章部分?

错误显示:

消息(已报告2条)

NoMethodError (未定义方法 `url' 用于 nil:NilClass)
app/models/badge.rb:306:in `image_url'
(eval):10:in `_fast_attributes'
app/controllers/application_controller.rb:484:in `serialize_data'
app/controllers/badges_controller.rb:30:in `index'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:356:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'

回溯

app/models/badge.rb:306:in `image_url'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:99:in `block in attribute'
(eval):10:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:89:in `block in _serializable_array'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `map'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `_serializable_array'

环境

HTTP HOSTS: site.com
1 个赞

其他图片是否已正确恢复?

您是否确定在备份中包含了上传的文件?

您是否使用 s3 来存储您的上传文件?如果不是,您能否进入容器,然后转到 /shared/uploads/default/original/1X,您在那里有文件吗?

1 个赞

是的,我不使用 s3,并且我总是包含附件图片进行备份……

我现在正在寻找如何重置徽章图片?

开箱即用,据我所知,没有办法“重置徽章图像”。

我首先会检查缺失图像的徽章是否至少已恢复。如果您查看 badges 表,可以在 image_upload 字段中获取图像的 ID。然后,您可以使用该 ID 在 uploads 表中获取图像的 URL,如下所示:

select url from uploads where id = <badge-upload-id>

URL 看起来像这样:/uploads/default/original/1X/c1325294cd04ae6e9072a2577543dad66cf31afe.jpeg,然后您可以从中提取文件名,在本例中为 c1325294cd04ae6e9072a2577543dad66cf31afe.jpeg

然后,您可以使用 find 或任何您喜欢的方法在服务器上检查图像是否存在

cd /
find . -name c1325294cd04ae6e9072a2577543dad66cf31afe.jpeg

一旦您确定图像已恢复到正确的路径,那么您可以继续调试,因为问题出在其他地方。

备份中的 Discourse 版本与您正在恢复到的 Discourse 版本差异太大?

不过,也许社区中的其他人对此有更多了解。

1 个赞

好的,但我如何知道缺少徽章的网址或名称?

我找不到如何知道缺少网址或徽章图像名称的方法。

请按照此处的说明 Discourse Data Explorer 安装数据探索器插件,您可以使用它来检查 badges 表。请重点关注您的自定义徽章。

1 个赞

我已安装,但未找到徽章表;

这是我在打开管理员配置文件时收到的错误:

Message

NoMethodError (undefined method `url' for nil:NilClass)
app/models/badge.rb:306:in `image_url'
(eval):10:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:54:in `include!'
lib/freedom_patches/ams_include_without_root.rb:54:in `include!'
app/controllers/users_controller.rb:92:in `block (2 levels) in show'
app/controllers/users_controller.rb:89:in `show'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/middleware/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:356:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'

Backtrace

app/models/badge.rb:306:in `image_url'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:99:in `block in attribute'
(eval):10:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:448:in `block in merge_association'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:445:in `each'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:445:in `merge_association'

Env

HTTP HOSTS: site.com

你好 @f1r4s
我遇到了同样的问题。你解决这个问题了吗?

我相信这已在此主题中得到解决:

1 个赞