[rubysur] rewrite o simil en rails

19 views
Skip to first unread message

Alvaro Olivencia

unread,
Nov 2, 2012, 10:45:35 PM11/2/12
to rubysur
Hola gente.

Hasta ahora estaba manejando N rewrite rules en apache.

Ahora lo que tengo que hacer, es un rewrite dependiendo del formato de la request(detalles abajo)  .
O sea que si la request es "www.sito.com/hola", tengo que en realidad ejectuar la url "www.sitio.com/aaa/bbb/argentina/buenos-aires?rewrite=hola"
Pregunta: Como genero "aaa/bbb/argentina/buenos-aires" ??? 
Respuesta: a partir de la request, mas precisamente de hola, ya que "aaa/bbb/argentina/buenos-aires" son valores que yo tengo el la DB asociados a hola.

Todos estos valores que quiero cargar estan en mi DB.

Otro detalle importante es que solo quiero que se ejecute el rewrite para request como estas:


... o sea, host + "primer folder"

Este es un ejemplo (pseudo) de lo que antes tenia:

RewriteRule /things-to-do-in-buenos-aires, /aaa/bbb/argentina/buenos-aires?rewrite=things-to-do-in-buenos-aires

La cosa es que ahora tengo que: 
  1. detectar el "things-to-do-in-buenos-aires"
  2. si lo de arriba es TRUE preguntar si "things-to-do-in-buenos-aires" existe en mi DB
  3. si es tambien TRUE,  generar la url como el ejemplo:  :/aaa/bbb/argentina/buenos-aires?rewrite=things-to-do-in-buenos-aires"
  4. hacer el rewrite.

Mi problema es con el punto 1 y 4: no estoy seguro donde hacerlo, supongo que todo deberia estar en el application_controller.rb, si se les ocurre algo mejor, soy todo oidos.
Tampoco se como hacer el rewrite en ruby/rails.. si es posible.... eso espero !

Sistema:
ruby 1.8.7
rails 2.3.5


Muchas gracias !!!!!






 

geronimo diaz

unread,
Nov 2, 2012, 11:42:47 PM11/2/12
to rub...@googlegroups.com
las rutas de rails son tu mod_rewrite de apache, creo que la mejor opcion en este caso es instalar un middleware, pero te tiro una idea (sin middleware), instala una ruta que capture las que necesitas manejar, algo asi https://gist.github.com/4005700, respecto a la ruta, puede que te capture mas de las deseadas y/o te rompa existentes por lo que quizas tengas que agregar alguna conditions y regexp asociada y tambien ver la prioridad de la ruta. 

Saludos.


--
Geronimo Diaz
Ruby/RoR Developer

Alvaro Olivencia

unread,
Nov 3, 2012, 12:56:07 AM11/3/12
to rubysur
Hola geronimo. Probe un middleware: https://github.com/jtrupiano/rack-rewrite
Pero el problema es que no puedo ejecurar consultas a la DB... o al menos no pude :)
Gracias por tu ejemplo, ahora mas tarde lo pruebo


2012/11/3 geronimo diaz <gero...@gmail.com>

geronimo diaz

unread,
Nov 3, 2012, 7:58:13 AM11/3/12
to rub...@googlegroups.com
El 3 de noviembre de 2012 01:56, Alvaro Olivencia <alvaroo...@gmail.com> escribió:
Hola geronimo. Probe un middleware: https://github.com/jtrupiano/rack-rewrite
Pero el problema es que no puedo ejecurar consultas a la DB... o al menos no pude :)
Gracias por tu ejemplo, ahora mas tarde lo pruebo

Hola Alvaro, probaste hacer un query desde el middleware usando directamente ActiveRecord::Base.connection ? fijate que hay middlewares sobre AR por lo que podes tener acceso a la db, por ejm https://github.com/ktheory/rack-active_record_status/blob/master/lib/rack/active_record_status.rb 

Saludos.

 

Prefiero.PHP

unread,
Nov 3, 2012, 2:40:06 PM11/3/12
to rub...@googlegroups.com
Nada de experiencia con rails 2.3
Lo que se me ocurre es una ruta

#abajo de todo
map.connect ':query', :controller => 'searcher', :action => 'search'

y de ahi podes hacer un redirect a la pagina que queres.
Si querés mostrar contenido sin redirect, ahi se complica un poco. Un lazyass como yo usaria un iframe.

Firma: yo

Alvaro Olivencia

unread,
Nov 3, 2012, 7:33:41 PM11/3/12
to rubysur
2012/11/3 geronimo diaz <gero...@gmail.com>



las rutas de rails son tu mod_rewrite de apache, creo que la mejor opcion en este caso es instalar un middleware, pero te tiro una idea (sin middleware), instala una ruta que capture las que necesitas manejar, algo asi https://gist.github.com/4005700, respecto a la ruta, puede que te capture mas de las deseadas y/o te rompa existentes por lo que quizas tengas que agregar alguna conditions y regexp asociada y tambien ver la prioridad de la ruta. 

Saludos.



Geronimo, recien ahora pude chequear tu codigo. Por lo que veo lo que estas haciendo es un redirect_to. Pero eso no me serviria, ya que me redireccionaría hacia ""/aaa/bbbb/argentina/buenos-aires?rewrite=things-to-do-in-buenos-aires", y yo quiero que la url quede como está, o sea que sea "www.sitio.com/things-to-do-in-buenos-aires", me explico ?

Gracias. 

Alvaro Olivencia

unread,
Nov 6, 2012, 8:05:39 PM11/6/12
to rubysur
Gente, finalmente terminé usando rack-rewrite y pude usar una query, quedó algo asi como:


rewrite %r{(.*)}, lambda { |match, rack_ev|
    c = ActiveRecord::Base.connection
    if myRegex is true #pseudo linea
      seo = c.select_all("select first, second from mytable where keyword = #{c.quote(aux[1])} and active =1")   
      if seo.count > 0
        "/#{seo[0]['first']}/#{seo[0]['second']}?rewrite=#{aux[1]}"    
      else
        match[1]
      end
    else
      match[1]
    end
  }


Gracias Gerónimo por la guía !


2012/11/3 Alvaro Olivencia <alvaroo...@gmail.com>

Alvaro Olivencia

unread,
Nov 6, 2012, 8:07:15 PM11/6/12
to rubysur
PD, en realidad el ActiveRecord::Base.connection dentro del 1er IF :p


2012/11/6 Alvaro Olivencia <alvaroo...@gmail.com>
Reply all
Reply to author
Forward
0 new messages