Can't generate user avatars when moving to new server because extension is "unknown"

AI-generated summary

A user pfaffman reports a bug where user avatars fail to generate after moving a Discourse site from a subdirectory (/community) to a subdomain (community.example.com) via backup/restore. The issue stems from uploads having the extension ‘unknown’, preventing thumbnail generation. pfaffman suggests the system should infer the extension from the filename instead of returning false. Attempts to fix via rake avatars:refresh, manual refresh_avatar, or Sidekiq jobs initially fail. A workaround involves manually updating the extension from the filename and then enqueuing create_avatar_thumbnails jobs for affected uploads. IAmGav notes a potential trigger in Sidekiq and references a relevant job spec. pfaffman confirms the fix works after patching extensions and regenerating thumbnails. codinghorror questions whether this is a general restore artifact or specific to this case, noting it hasn’t been widely observed. The issue remains unresolved and under-reported despite being flagged as a bug and receiving a :heart: from Jeff.

EDIT: I’m reclassifying this as a bug, so that someone who understands this better than I can take a look at it.

a bunch of uploads had “unknown” as the extension. This means that it’s impossible to generate thumbnails. I think this happened when moving a backup to a new site and then needed to regenerate the thumbnails.

I think what should happen when you try to generate thumbnails and the extension is ‘unknown’ is to replace the extension, something like

 upload.extension = upload.original_filename.split('.').last

It seems like if this were done somewhere that I’d not have spent 4 hours on this.

Wait. This looks like the problem. Why return false rather than get the extension from the filename?

Gory details follow.

I moved a site from /community to community.example.com by doing a backup and restore. I fixed the uploads with a

 RAILS_ENV=production bundle exec script/discourse remap '/community/uploads' '/uploads'

But the avatars are still the Gray Man.

When I look at user.user_avatar.custom_upload.url and paste that URL into the browser, I get the desired avatar. It seems like I need to “rebake” the users.

I thought that perhaps a

rake avatars:refresh

or

rake avatars:clean 

might fix it, but no joy.

What am I missing?

1 Like

In sidekiq there is a trigger to create missing avatars.

It takes a while, but that should help if I am not mistaken

2 Likes

Good one! That callls User.refresh_avatar, but sadly

  user=User.find_by_username('broken_avatar_guy')
  user.refresh_avatar

also isn’t solving this.

2 Likes

Here’s a clue:

ActionController::RoutingError (No route matches [GET] "/user_avatar/community.example.com/broken_user")
1 Like

Do it update when the user logs into their account ?

I don’t believe so.

user.user_avatar.custom_upload has the correct URL, but https://community.example.com/user_avatar/community.example.com/bad_user/25/321_2.png has the missing avatgar image. I need to find the way to rebuild those avatar thumbnails.

there is a force_avatar_update in the user login that i saw in the code.

this could be very helpful, it looks like a job

Something must be wrong:

user=User.find_by_username('Tuomo')
upload_id=user.user_avatar.custom_upload.id
upload = Upload.find(upload_id)
      Discourse.avatar_sizes.each do |size|
        OptimizedImage.create_for(upload, size, size)
      end
OptimizedImage.where(upload_id: upload_id)

ANd I get the no opimized images.

broken_uploads = Upload.where(extension: "unknown")
broken_uploads.each do |upload|
  upload.extension = upload.original_filename.split('.').last
  upload.save
end

fixes that.

Then I just need to generate new thumbnails, like this:


has_upload = UserAvatar.where("custom_upload_id > 0")

has_upload.each do |user_avatar|
  Jobs.enqueue(:create_avatar_thumbnails,{upload_id: user_avatar.custom_upload_id})
end
2 Likes

I think that this is a legit bug and Jeff :heart:ed, but it hasn’t gotten any more attention.

Am I crazy or is there something broken here?

2 Likes

I moved a site from /community to community.example.com by doing a backup and restore

I guess we just haven’t run into this with any of our restores, because what you’re complaining about here are restore artifacts, yes? Perhaps specific to this backup and restore?

1 Like