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

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