У меня есть приложение rails, где каждый пользователь может подключить свою учетную запись Facebook и дать разрешение на отправку сообщений из приложения, которое использует. Итак, каждый зарегистрированный пользователь с подключенной учетной записью Facebook должен иметь один Jabber-клиент, авторизованный с его идентификатором Facebook, токеном и т. Д., Я делаю это с помощью xmpp4r GEM.
Подключенная учетная запись facebook с токеном и данные facebook хранятся в базе данных как объект Mailman. Класс Mailman также имеет методы для управления клиентом Jabber, такие как run_client, connect_client, authorize_client, stop_client, get_client и т. Д. Наиболее важными для меня методами являются connect_client и get_client.
class Mailman < ActiveRecord::Base
@@clients = {} unless defined? @@clients
def connect_client
#some code
@@clients[self.id] = Jabber::Client.new Jabber::JID.new(facebook_chat_id)
#some code
end
def get_client
@@clients[self.id]
end
#other stuff
end
Как вы можете видеть в коде, каждый объект Mailman имеет метод get_client, который должен возвращать объект Jabber :: Client, и это правда, он работает, но только в рамках запущенного приложения, поскольку переменная @@ clients хранится только для конкретное запущенное приложение.
Это проблема для меня, потому что я хотел бы использовать задачу cron для закрытия бездействующих клиентов, а задача cron использует другую инициализацию приложения, поэтому Mailman.find (x) .get_client всегда будет возвращать nil, даже если он возвращает Jabber: : Клиентский объект в производственном приложении.
Как вы справляетесь с такими проблемами? Например, можно ли получить указатель на память для объекта Jabber :: Client и сохранить его в базе данных, чтобы его можно было использовать при инициализации любого другого приложения? Я понятия не имею, как этого добиться. Спасибо за любой совет!