Mam bota jabberowego w serwisie który co 10 min pobiera vcard użytkowników z rostera i wyciąga z niego avatar który zapisuje na dysku. Kod wygląda tak:
[code] Thread.new do
while @running do
get_avatars
sleep 1
end
end
def get_avatars
users = Uzytkownik.all
vCard_Helper = Jabber::Vcard::Helper.new(@bot.jabber.client)
users.each do |user|
vcard = vCard_Helper.get(user.jid.strip)
unless vcard.nil? || vcard['PHOTO/BINVAL'].nil?
avatar_name = "#{user.login}.#{mime_to_ext(vcard['PHOTO/TYPE'])}"
avatar_path = "#{RAILS_ROOT}/public/avatars/#{avatar_name}"
avatar = File.new(avatar_path, 'w+')
avatar.write(vcard.photo_binval)
avatar.close
log "Avatar zapisano jako: #{avatar_name}"
end
end
end[/code]
Problem jest taki że kod testowany w konsoli działa dobrze jednak gdy odpalam bota to przy pierwszym użytkowniku wszystko zamarza. Dokładnie przy vcard = vCard_Helper.get(user.jid.strip). Nie mam zielonego pojęcia dlaczego tak się dzieje. W bocie używam DRb do komunikacji bota z railsami