В моей модели User у меня есть:
validates_uniqueness_of: fb_uid (я использую Facebook Connect).
Однако иногда я получаю повторяющиеся строки при регистрации пользователя. Это очень плохо.
Время создания двух записей находится в пределах 100 мс. Я не смог определить, происходит ли это в двух отдельных запросах или нет (запись в журнал heroku отстой, и он возвращается только к этому моменту, и это происходит только дважды).
Две вещи:
- Иногда запрос занимает некоторое время, потому что я запрашиваю в FB API информацию об имени, друзьях и фотографии.
- Я использую bigint для хранения fb_uid (backend - postgres).
Мне не удалось воспроизвести в dev.
Любые идеи будут чрезвычайно признательны.
Функция входа в систему
def self.create_from_cookie(fb_cookie, remote_ip = nil)
return nil unless fb_cookie
return nil unless fb_hash = authenticate_cookie(fb_cookie)
uid = fb_hash["uid"].join.to_i
#Make user and set data
fb_user = FacebookUser.new
fb_user.fb_uid = uid
fb_user.fb_authorized = true
fb_user.email_confirmed = true
fb_user.creation_ip = remote_ip
fb_name_data, fb_friends_data, fb_photo_data, fb_photo_ext = fb_user.query_data(fb_hash)
return nil unless fb_name_data
fb_user.set_name(fb_name_data)
fb_user.set_photo(fb_photo_data, fb_photo_ext)
#Save user and friends to the db
return nil unless fb_user.save
fb_user.set_friends(fb_friends_data)
return fb_user
end