У меня есть объект пользователя, который я получаю данные пользователя из твиттера/facebook, затем нажмите «Сохранить» и, наконец, отправьте user_id
и avatar_url
в .Создание новой записи базы данных, а затем отправка идентификатора на Resque возвращает nil (идентификатор не найден)
self.save!
Resque.enqueue(AvatarPull, {user_id: self.id, url: user[:avatar] }) if user[:avatar] and self.avatar.blank?
Тогда в self.perform
я просто использовать найти, чтобы получить пользователя по идентификатору затем установить аватар затем сохранить.
@queue = :paperclip
def self.perform(options={})
user = User.find(options[:user_id])
user.avatar = URI.parse(options[:url].sub("_normal", ""))
user.save!
end
Проблема заключается в том, я получаю эту ошибку, что не найти пользователя по идентификатору
(Job{paperclip} | AvatarPull | [{"user_id"=>"51191a5e0eae9cfccf000006", "url"=>"http://source"}]) failed: #<Mongoid::Errors::InvalidFind:
Problem:
Calling Document.find with nil is invalid.
Summary:
Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.
Resolution:
Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.>
Я думаю, что это происходит потому, что время, потраченное идти в очередь меньше, чем время, необходимое, чтобы сохранить запись в базу данных. Есть ли возможность устранить эту проблему, возможно, добавить задержку или что-то еще?