个人资料偏好设置 404 错误/管理员个人资料无法使用

我这个问题已经存在一个月了;但我尝试了几次升级;将数据库迁移到新的数据库;等等……都没有解决。

之前是在管理员用户那里,我尝试将管理员数据迁移到新的用户那里;同样的问题……我无法打开偏好设置或个人资料,并收到 404 错误;

我看到了类似的问题,但没有人解释如何修复,而且这个问题已经存在三年了。

同样的问题,他们提到已经修复,但太久了,没有人解释如何修复。

这是什么意思?

您在使用任何插件吗?

您在 /logs 中看到任何内容吗?

2 个赞

我禁用了所有插件并恢复了数据库,但错误仍然存在,我不知道该怎么办……所以我来这里发帖求助。

您需要提供一些信息供我们参考。

2 个赞

日志显示此内容

Job exception: getaddrinfo: No address associated with hostname
2:11 am
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/free
消息

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/application_controller.rb:510:in `render_json_dump'
app/controllers/users_controller.rb:97: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/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/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'

环境

HTTP HOSTS: site.com

您是否尝试过禁用徽章,看看这是否能解决问题?

是的,我试过了,但还是同样的问题

这似乎是您之前发布过的相同问题。我将在此链接其他主题,以防其中有更多信息可以帮助人们弄清楚出了什么问题:

我不确定我是否完全理解。问题是您无法访问管理屏幕吗?

是的,我之前提到过一个月前我曾遇到过这个问题,并尝试了多种方法来修复它,但都失败了。

我可以看到管理屏幕,但无法打开管理个人资料或偏好设置,它会给我一个 404 错误。

您认为这可能是因为自定义徽章?其他拥有自定义徽章的用户是否受到影响?如果是,您能否撤销自定义徽章或将其完全删除?

我不知道如何撤销或删除它们……有什么指南可以尝试一下吗?

您可以在其管理/用户页面编辑/撤销用户的徽章:(如果您可以访问该页面)

或者,您可以从管理区域的“徽章”部分删除自定义徽章:

[YourSite]/admin/badges

在偏好设置或个人资料中我无法访问(404错误);在徽章部分(500错误);

错误代码:500错误

也许我可以通过命令行执行恢复基本徽章的操作?

消息

未捕获的 [object Object]
网址:https://site.com/assets/vendor-3c473d73e5222f7710764282fcc17d73997b7fbd37e0c12afc050b80693ceee2.js
行号:36
列号:180628
窗口位置:https://site.com/admin/badges

堆栈跟踪


环境

HTTP 主机:site.com

我认为没有简单的“重置”方法可以用于徽章,即使是从 rails 控制台操作。

你在另一个主题中推荐的数据浏览器查询进行到哪一步了?你是否找到了导致问题的徽章图片?

我没有,如果可能的话,你可以看一下吗?

经过一些试验,我可以重现这个故障(或者类似的情况)。我尝试使用控制台在 Badge 表的 image_upload_id 中插入一个“null”值,但它却用 0 填充了。这导致我的测试站点像您描述的那样被锁定。

我通过将所有 image_upload_id 更改为“1”来“修复”它。这让我重新进入了我的个人资料和徽章部分,但我现在必须手动将所有徽章换回仅图标等。

要检查您的问题是否类似,您可以访问您的数据浏览器并创建一个新查询,然后粘贴以下内容(并运行):

Select name, image_upload_id
FROM badges b
Order By id desc

我也发现,控制台需要的是“nil”而不是“null”才能正常工作。:slightly_smiling_face:

这修复了我损坏的徽章,而无需手动逐个处理:

Badge.where('image_upload_id=0').find_each do |b|
b.image_upload_id = nil
b.save
end

由于不知道您的问题具体是什么,我不能确定这是否能以同样的方式修复您的问题——不过也许“全部更改为 nil”可以解决您的问题?

1 个赞

你好 @jammydodger

它向我显示了类似这样的内容

我看到大多数徽章都是 NULL,除了 3 个徽章的值为 17

然后我再次检查个人资料;“日志”中仍然出现错误;

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/application_controller.rb:510:in `render_json_dump'
app/controllers/users_controller.rb:97:in `block (2 levels) in show'
app/controllers/users_controller.rb:89:in `show'
app/controllers/users_controller.rb:103:in `show_card'
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/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

我应该选择其他东西,还是你更愿意自己进去看看?

1 个赞

数据浏览器查询无法解决问题,但它提供的信息可能会有帮助。:+1:

如果您乐意使用 rails 控制台,可以尝试以下方法将这些 17 重置为 null:(别忘了以防万一进行备份)

导航到 rails 控制台:

cd /var/discourse
./launcher enter app
rails c

粘贴此内容:

Badge.where('image_upload_id=17').find_each do |b|
b.image_upload_id = nil
b.save
end

希望这能解锁徽章部分和个人资料,以便您可以重新开始。:+1::crossed_fingers:

2 个赞

知识不被使用和分享就没有价值,哥们!感谢你的时间,哥们……搞定了!

2 个赞