mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-23 15:48:43 -05:00
CRUSHED: duplicate key value violates unique constraint 'index_uploads_on_sha1'
This commit is contained in:
parent
52c19d74f8
commit
9a96cd9f3b
3 changed files with 29 additions and 23 deletions
|
@ -1,13 +1,15 @@
|
|||
module Jobs
|
||||
class CreateMissingAvatars < Jobs::Scheduled
|
||||
every 1.hour
|
||||
|
||||
def execute(args)
|
||||
# backfill in batches 5000 an hour
|
||||
UserAvatar.where(last_gravatar_download_attempt: nil).includes(:user)
|
||||
.order("users.last_posted_at desc")
|
||||
.limit(5000).each do |u|
|
||||
# backfill in batches of 5000 an hour
|
||||
UserAvatar.includes(:user)
|
||||
.where(last_gravatar_download_attempt: nil)
|
||||
.order("users.last_posted_at DESC")
|
||||
.limit(5000)
|
||||
.each do |u|
|
||||
u.user.refresh_avatar
|
||||
u.user.save
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -10,27 +10,31 @@ class UserAvatar < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def update_gravatar!
|
||||
# special logic for our system user, we do not want the discourse email there
|
||||
email_hash = user.id == -1 ? User.email_hash("info@discourse.org") : user.email_hash
|
||||
DistributedMutex.synchronize("update_gravatar_#{user.id}") do
|
||||
begin
|
||||
# special logic for our system user
|
||||
email_hash = user.id == Discourse::SYSTEM_USER_ID ? User.email_hash("info@discourse.org") : user.email_hash
|
||||
|
||||
self.last_gravatar_download_attempt = Time.new
|
||||
gravatar_url = "http://www.gravatar.com/avatar/#{email_hash}.png?s=500&d=404"
|
||||
tempfile = FileHelper.download(gravatar_url, SiteSetting.max_image_size_kb.kilobytes, "gravatar")
|
||||
self.last_gravatar_download_attempt = Time.new
|
||||
|
||||
upload = Upload.create_for(user.id, tempfile, 'gravatar.png', tempfile.size, { origin: gravatar_url })
|
||||
gravatar_url = "http://www.gravatar.com/avatar/#{email_hash}.png?s=500&d=404"
|
||||
tempfile = FileHelper.download(gravatar_url, SiteSetting.max_image_size_kb.kilobytes, "gravatar")
|
||||
upload = Upload.create_for(user.id, tempfile, 'gravatar.png', tempfile.size, { origin: gravatar_url })
|
||||
|
||||
if gravatar_upload_id != upload.id
|
||||
gravatar_upload.try(:destroy!)
|
||||
self.gravatar_upload = upload
|
||||
save!
|
||||
if gravatar_upload_id != upload.id
|
||||
gravatar_upload.try(:destroy!)
|
||||
self.gravatar_upload = upload
|
||||
save!
|
||||
end
|
||||
rescue OpenURI::HTTPError
|
||||
save!
|
||||
rescue SocketError
|
||||
# skip saving, we are not connected to the net
|
||||
Rails.logger.warn "Failed to download gravatar, socket error - user id #{user.id}"
|
||||
ensure
|
||||
tempfile.try(:close!)
|
||||
end
|
||||
end
|
||||
rescue OpenURI::HTTPError
|
||||
save!
|
||||
rescue SocketError
|
||||
# skip saving, we are not connected to the net
|
||||
Rails.logger.warn "Failed to download gravatar, socket error - user id #{user.id}"
|
||||
ensure
|
||||
tempfile.close! if tempfile && tempfile.respond_to?(:close!)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -256,7 +256,7 @@ module Discourse
|
|||
user ||= User.admins.real.order(:id).first
|
||||
end
|
||||
|
||||
SYSTEM_USER_ID = -1 unless defined? SYSTEM_USER_ID
|
||||
SYSTEM_USER_ID ||= -1
|
||||
|
||||
def self.system_user
|
||||
User.find_by(id: SYSTEM_USER_ID)
|
||||
|
|
Loading…
Reference in a new issue