У меня есть инициализатор, который запускает клиент xmpp4r. Он отлично работает, когда я запускаю сервер puma как обычный процесс. Но когда я запускаю puma как демона (опция -d), он работает несколько секунд и отключается от сервера xmpp. У меня есть отдельный поток, который обрабатывает повторные подключения, но он не работает, когда puma является демоном.
def init_reconnection_timer
timers = Timers::Group.new
periodic_timer = timers.every(5) do
if @client.is_disconnected?
begin
Rails.logger.info "XmppConnector ##### reconnecting to #{APP_CONFIG['broker_address']} ..."
connect
Rails.logger.info "XmppConnector ##### connected!"
presence
rescue
end
end
end
Thread.new do
loop do
timers.wait
end
end
end
У меня ничего нет из этого кода в журнале, когда puma является демоном. Сразу после запуска rails приложение работает несколько секунд, получает сообщения, iqs, ошибок нет, как обычно. Потом молча отключается. Вот конструктор моего класса:
class XmppConnector
include Singleton
def initialize
@jid = Jabber::JID::new(APP_CONFIG['broker_username'] + '@' + APP_CONFIG['broker_address'])
@jid.resource='rails'
@client = Jabber::Client::new(@jid)
connect
init_presence_callback
init_message_callback
init_iq_callback
init_reconnection_timer
init_subscription_requests
presence
@protocol_interface = RemoteInterface.new
Rails.logger.info "XmppConnector ##### initialized"
end
Но когда пума запускается без опции -d - вообще никаких проблем. То же самое в разработке и производстве, моя рабочая станция и сервер. ruby 2.0.0 puma 2.9.2 Минимальное количество потоков: 0, максимальное количество потоков: 16 рельсов 4.2.0beta4