Hello à tous,
Je suis en train de créer un site communautaire actuellement et j'en suis à
la partie critique et malheureusement je rencontre un sérieux problème.
Dans mon app j'ai crée un controller que j'appelle LiveStream dont le role
est d'écouter le serveur redis et de broadcaster les events.
Le premier événement qui est suivi est la création de profiles; donc dans
mon code j'ai
$redis.publish('profile.create', @profile.to_json)
dans mon controller liveStream j'ai cette action:
def events
response.headers["Content-Type"] = "text/event-stream"
redis = Redis.new
redis.psubscribe('messages.*') do |on|
on.pmessage do |pattern, event, data|
response.stream.write("event: #{event}\n")
response.stream.write("data: #{data}\n\n")
end
end
rescue IOError
logger.info "Stream closed"
ensure
response.stream.close
redis.quit
end
j'ai un fichier coffeeScript qui pointe dessus:
source = new EventSource('/en/livestream/events')
source.addEventListener 'message', (e) ->
alert e.data
Rien de bien sorcier, mais malheureusement ça ne marche pas. l'alert ne
s'affiche jamais alors que redis le controller reçoit bien le message
renvoyé par redis.
J'ai donc fait un essai avec un code tout bête:
def events
response.headers["Content-Type"] = "text/event-stream"
3.times do |n|
response.stream.write "data: #{n}...\n\n"
sleep 2
end
rescue IOError
logger.info "Stream closed"
ensure
response.stream.close
end
et là tout marche bien.
A votre avis à quel moment ça foire? sachant que quand je fais un
logger.info dans le bloc on.pmessage je vois bien l'objet data envoyé
j'ai suivi ce railscast:
http://railscasts.com/episodes/401-actioncontroller-live et mis à jour le
gemfile et les config pour faire tourner le sample sur rails 4.1.4 et le
résultat est le même: les messages envoyés via le chat ne sont pas diffusés
ni à l'envoyeur ni aux autres clients et la vue n'est même pas mise à jour
avec le dernier message posté.
mon environnement: Ruby 2.1, rails 4.1.4, serveur Puma, PosgreSQL
Merci pour votre aide!
--
--
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse
[email protected]
---
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes
Railsfrance.
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant,
envoyez un e-mail à l'adresse [email protected].
Pour plus d'options, visitez le site https://groups.google.com/d/optout .