Ruby Forum Rails-ES > Hacer un chat

Posted by Miguel angel Calleja lázaro (migue)
on 30.04.2008 16:58
(Received via mailing list)
Hola amigos, me gustaría hacer un chat en ruby on rails para una
aplicación, lo primero que he visto por Google son estos enlaces [1] y
[2], alguien ha hecho alguno, os agradecería si me recomendarais o 
algún link informativo. Gracias

[1]
http://ajaxian.com/archives/realtime-on-rails-real-time-chat-using-xhr-push
[2]
http://www.urubatan.info/2007/10/a-cool-chat-example-created-with-ruby-on-rails-and-juggernaut/
Posted by javier ramirez (Guest)
on 30.04.2008 17:07
(Received via mailing list)
hola,

> Hola amigos, me gustaría hacer un chat en ruby on rails para una 
> aplicación, lo primero que he visto por Google son estos enlaces [1] y 
> [2], alguien ha hecho alguno, os agradecería si me recomendarais o algún 
> link informativo. Gracias
>   

hace poco salió este mismo tema en el foro de workingwithrails
(http://workingwithrails.com/forums/4-ask-a-rails-expert/topics/119-chatting-program)

yo recomendaba usar juggernaut (http://juggernaut.rubyforge.org/), sobre
todo porque da bastantes cosas de forma simple. Pero en el thread salía 
alguna otra 
opción.
saludos,

javier ramírez
Posted by Listas (Guest)
on 30.04.2008 17:23
(Received via mailing list)
yo creo que un refresh periódico es más práctico,
un server de push te exige cambiar ligeramente la infraestructura


marze

El 30/04/2008, a las 17:06, javier ramirez 
escribió:
> hola,
Posted by Juan Pablo (Guest)
on 30.04.2008 17:36
(Received via mailing list)
Si te decides por el refresh periódico aquí [1] hay uno libre que te 
puede
servir de ayuda.
Para hacerlo con refresh tienes que tener en cuenta la cantidad de 
usuarios
que usaran el chat, ya que cada usuario conectado va a estar generando
consultas cada 5 segundos por ejemplo, aunque no escriban.

Campfire usa refresh periódico, así que tan malo no puede ser.

[1] http://rinstant.rubyforge.org/

2008/4/30 Listas <listas@marze.es>:
Posted by Miguel angel Calleja lázaro (migue)
on 30.04.2008 18:15
(Received via mailing list)
javier ramirez 
escribió:> (http://workingwithrails.com/forums/4-ask-a-rails-expert/topics/119-chatting-program)
> Ror-es@lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>
>   
Ok, sabes si juggernaut es de pago por instalar algún requerimento, push
server, etc o usar flash en el servidor? Me comentan que el chat estaría 
entorno a los 30 usuarios, no más.
Posted by javier ramirez (Guest)
on 30.04.2008 18:31
(Received via mailing list)
hola,

>> yo recomendaba usar juggernaut (http://juggernaut.rubyforge.org/), sobre 
>>     
> Ok, sabes si juggernaut es de pago por instalar algún requerimento, push 
> server, etc o usar flash en el servidor? Me comentan que el chat estaría 
> entorno a los 30 usuarios, no más.
>   

vuelvo a recomendarte la url que te pasé, en la que tienes los
requisitos, la licencia, etc... lo siento pero no voy a explicártelo
aquí si lo tienes en el README de la página que te he pasado.

lo único que creo que no está ahí directamente (pero sí lo encontré una
vez en los archivos de la lista de correo de juggernaut) es lo de los
usuarios. Si no recuerdo mal, hasta 1000 no tenía problemas.
Posted by Miguel angel Calleja lázaro (migue)
on 30.04.2008 18:50
(Received via mailing list)
javier ramirez 
escribió:>>     
> _______________________________________________
> Ror-es mailing list
> Ror-es@lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>
>   
Hola Javier, de nuevo gracias por la recomendación, no pido que me
explique nadie nada, faltaría más. De hecho ya lo había leido antes el
enlace que me pasaste y el Readme también, te doy las gracias de nuevo,
aún así no conseguí leer nada de licencias tan 
sólo encontré:
=CONTACT DETAILS

  Author: Alex MacCaw
  E-Mail Address: info@alexmaccaw.co.uk
  License: MIT
  Website: http://juggernaut.rubyforge.org
  Blog: http://www.eribium.org

de ahí mis dudas, por supuesto que vi los requisitos, features, install y 
demás, de hecho lo he leido un par de veces, pero no pedí que me explique 
nadie cómo funciona, o estoy yo muy torpe hoy o no veo información acerca de 
la licencia de si es de pago o no, no creo que sea pecado preguntar 
acerca de éso, pero bueno, gracias por el reporte e intentaré contactar con 
Alex, es que no me gustaría encontrarme luego con sorpresas. Perdona mi 
ignorancia sobre este asunto, gracias.
Posted by javier ramirez (Guest)
on 30.04.2008 18:58
(Received via mailing list)
Buenas de nuevo,


>   License: MIT
>   Website: http://juggernaut.rubyforge.org
>
>   

bueno.. como dice en el texto que has pegado, es una licencia MIT. Es la
misma que usa Rails. Lo puedes usar de forma gratuita siempre que
distribuyas la licencia junto con tu código.
Posted by Carlos Ramos (carakan)
on 06.05.2008 22:40
javier ramirez wrote:
> Buenas de nuevo,
> 
> 
>>   License: MIT
>>   Website: http://juggernaut.rubyforge.org
>>
>>   
> 
> bueno.. como dice en el texto que has pegado, es una licencia MIT. Es la
> misma que usa Rails. Lo puedes usar de forma gratuita siempre que
> distribuyas la licencia junto con tu c�digo.

Hola Javier, esto es lo que encontre en mi lector de feeds: El dorado
http://almosteffortless.com/2008/05/05/el-dorado-092-group-chat-edition/

Espero que te sirva

Saludos.
Posted by Miguel angel Calleja lázaro (migue)
on 07.05.2008 09:33
(Received via mailing list)
Carlos Ramos escribió:
>>>       
> Saludos.
>   
HOla Carlos, el chat era para mí, Javier sólo me aconsejaba jej. Aparte
del juggernaut, encontré este otro también:
http://shooting-star.rubyforge.org/wiki/wiki.pl?Making_A_Chat_System_Within_5_Minutes

De momento estoy probando juggernaut, me funciona, para iniciar el push
server debo hacer:

juggernaut -c juggernaut.yml

pero hay alguna manera de correrlo por background así por decirlo de 
alguna manera, que esté corriendo cuando abra el chat.
Posted by javier ramirez (Guest)
on 07.05.2008 11:05
(Received via mailing list)
hola,

> http://shooting-star.rubyforge.org/wiki/wiki.pl?Making_A_Chat_System_Within_5_Minutes
>   

shooting star tiene muy buena pinta, aunque de momento todavía lo veo un
poco verde.. Estoy siguiendo el desarrollo de varios servidores para
comet y shooting star es de los más prometedor que he visto para Rails.
Le tengo el ojo puesto para cuando lo tengan funcionando mejor. También
hay un servidor  de comet (cometd) que no está hecho en ruby  pero que
tiene bindings para ruby. De todos modos,  no funciona muy bien tampoco
todavía.

Para push, a día de hoy, lo mejor que he visto que integre  bien con
Rails es  juggernaut . Si quieres polling tienes más opciones, como la
que te recomienda Carlos. Pero esas soluciones por definición o no van a
escalar bien o van a tener un funcionamiento lento (si usas caché y
haces un polling más bien largo).

> De momento estoy probando juggernaut, me funciona, para iniciar el push 
> server debo hacer:
>
> juggernaut -c juggernaut.yml
>
> pero hay alguna manera de correrlo por background así por decirlo de alguna manera, que esté corriendo cuando abra el chat.
>   

como has dicho, es un push server. Sería algo parecido al Apache o al
Mongrel de tu aplicación, es decir, que para que tus usuarios puedan
conectar tienes que arrancarlo previamente.

Saludos,

javier ramírez
Posted by Miguel angel Calleja lázaro (migue)
on 07.05.2008 18:52
(Received via mailing list)
javier ramirez escribió:
> Ror-es mailing list
> Ror-es@lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>   
Gracias Javier, miraré la manera de hacerlo correr.

Estoy mirando algún pequeño tutorial, en alguno veo métodos que no
existen, debe ser que está obsoleto, me he bajado creo que la última
versión de juggernaut, estoy intentando enviar los datos de diversas
formas para probar:


1) Viendo el log parece que lo hace bien, recibe el data, lo procesa
pero no lo envía al navegador.
 @users = OnlineUser.find(:all, :conditions => ["online = true and id !=
?", @user.id])
        if @users.size >0
                data = render_to_string(:update) do |page|
                @users.each {|u|
                page.insert_html :bottom, :users_list, %Q{<li
id="user_#{u.username}">#{u.username}</li>}
                }
                end

              #send the javascript only to the new user
                Juggernaut.send_to_client(data,@user.session_id)
        end

    Tanto @users como @user existen.

2) De esta otra forma, tampoco me envia el data, lo recibe, lo procesa
pero no lo pinta.
render :juggernaut => {:channels => [params[:send_to_channel]], :type =>
:send_to_channels} do |page|

      page.insert_html :top, 'chat_data', h(params[:chat_input])+"\n"
end

3) Y de esta forma simple si que lo recibo todo bien.
render :juggernaut do |page|
      page.insert_html :top, 'chat_data', "<li>#{h 
params[:chat_input]}</li>"
end

Pero a mi me interesa más la 1 y 2. Estoy escribiendo algo mal en esos 
puntos? Gracias
Posted by Miguel angel Calleja lázaro (migue)
on 08.05.2008 14:25
(Received via mailing list)
Miguel Angel Calleja Lázaro escribió:
>>
> versión de juggernaut, estoy intentando enviar los datos de diversas 
>                 page.insert_html :bottom, :users_list, %Q{<li 
> 2) De esta otra forma, tampoco me envia el data, lo recibe, lo procesa 
> end
>   
Ya lo he solucionado, añadiendo en la vista los canales:

<%= juggernaut(:channels => ['one', 'two', 'three']) %>

en vez de:
<%=juggernaut%>

Ahora si me va.

Tengo otra pregunta, tanto en explorer como en safari me salen alerts 
cada vez que se conecta y cada vez que se envía el mensaje, pero 
funciona, alguien sabe cómo puedo quitarlos?
El alert que sale es algo así:
try {
new Insertion.Bottom("dasd", "user: q mal escribo\u003Cbr/\u003E");
scrollMessages();
} catch (e) { alert('RJS error:\n\n' + e.toString()); alert('new
Insertion.Bottom(\"dasd\", \"uer: q mal
escribo\\u003Cbr/\\u003E\");\nscrollMessages();'); throw e } on
209.20.67.27:5001
Posted by Miguel Michelson (samek)
on 08.05.2008 15:38
(Received via mailing list)
Hola, tienes que comentar una linea en js/juggernaut/juggernaut.js

en la linea 36 +- tienes que comentar esta linea

      //this.hasFirebug ? console.log(msg) : alert(msg);

o bien solo darle soporte para firebug, es decir, solo si encuentra 
firebug

      this.hasFirebug ? console.log(msg) : '';


saludos


2008/5/8 Miguel Angel Calleja Lázaro <mangelcl@yahoo.es>:
Posted by Miguel angel Calleja lázaro (migue)
on 08.05.2008 18:23
(Received via mailing list)
Miguel Michelsongs 
escribió:>
>
> saludos
>
>
>
Cierto, ya lo he visto, muchas gracias