Novedades en Edge Rails #4

Posted: Noviembre 29th, 2008 | Author: Juan Lupión | Filed under: Home, blog | Tags: , |

La semana pasada los desarrolladores norteamericanos celebraron el Día de Acción de Gracias, pero esto no se ha notado en el desarrollo de Rails. Las cosas se encaminan hacia la versión 2.3 de Rails.

Integración con Rack

La base de script/server se ha reescrito y simplificado. Por ejemplo, la lista explícita de servidores soportados ha desaparecido y en su lugar Rails ahora depende de la instalación de Rack, y script/server hace esto – lo que quiere decir que ahora Rails soportará cualquier servidor siempre que Rack lo haga también.

Rutas más eficientes

Las rutas han visto un par de cambios importantes esta semana. Los helpers de rutas que empiezan por formatted_ han desaparecido, y en su lugar ahora hay que pasar la opción :format al helper normal. De esta maanera se ahorra hasta el 50% de las rutas generadas para un recurso y esto puede ahorar una cantidad sustancial de memoria (hasta el 100MB en aplicaciones grandes según este ticket en Lighthouse) Si tu código utiliza los helpers formatted_ por el momento seguirá funcionando, pero debes tener en cuenta que estos helpers son «a extinguir» y que tu aplicación será más eficiente si adaptas tu código para usar el nuevo estándar. Otro cambio importante es que Rails ahora soporte múltiples archivos de rutas, en lugar de usar únicamente routes.rb Se puede usar RouteSet#add_configuration_file para incorporar más rutas en cualquier momentot – y sin borrar las rutas ya cargadas. commit commit

Mejor soporte de plugins de Engines

El segundo cambio en las rutas permite soportar mejor los Engines: ahora se cargan y recargan automáticamente los archivos de rutas de los Engines (como en el resto de plugins) Pero los Engines están recibiendo más atención, además del enrutado: si tu plugin tiene un directorio app, entonces los directorios app/[models|controllers|helpers] se añadirán automáticamente al load path de Rails. Hay una discusión en curso acerca de cómo debería funcionar este mecanismo y cuánto reutilizar del plugin de Engines actual así que es posible que aún no hayamos visto los últimos commits en este aspecto. Los Engines ahora soportan la adición de paths para las vistas.commit commit commit commit

Volcados de los tests más sensatos

Si usamos el plugin Quiet Backtrace de Thoughtbot, que nos permite eliminar selectivamente las líneas de los volcados generados por Test::Unit, nos agradará saber que han aparecido ActiveSupport::BacktraceCleaner y Rails::BacktraceCleaner en el core de Rails. Se soportan tanto filtros (para hacer sustituciones en las líneas de volcado usando expresiones regulares) como silenciadores (para eliminar líneas enteras). En las aplicaciones nuevas Rails añadirá automáticamente silenciadores para eliminar la mayor parte del ruido en los volcados de tests y construirá un archivo config/backtrace_silencers.rb donde poder configurar los nuestros. commit

Integración con Ruby 1.9

Varios commits continúan avanzando en la compatibilidad con Ruby 1.9 y minitest para asegurar que Rails 2.3 está listo para funcionar con las nuevas mejoras en Ruby cuando sean lanzadas. Los que sigan el edge, sin embargo, deben tener en cuenta que uno de los últimos cambios en edge Rails depende de un parche al core de Ruby que aún no ha sido aplicado. También será necesario aplicar (temporalmente) el fork de Mocha de Jeremy Kemper para ser compatibles con MiniTest tal y como requiere este parche .

Tiempo de arranque más rápido en desarrollo

Jeremy Kemper y Josh Peek han estado trabajando para garantizar que haya partes de Rails y sus dependencias se carguen en memoria sólo cuando sea realmente necesario. Comprobad los commits del 23 de Noviembre para ver muchos cambios relacionados con esta recarga perezosa. Los frameworks Active Support, Active Record, Action Controller, Action Mailer y Action View ahora utilizan autoload para cargar sus clases individuales, y así mantener la carga de memoria lo más baja posible mejorando el rendimiento de Rails. commit commit commit commit commit

Otros

Con la nueva opción preload_frameworks se puede especificar si queremos que las librerías del core se autocarguen en el arranque. Por defecto es false de forma que Rails se autocarga pieza por pieza, pero en algunas circunstancias podríamos querer traerlo todo a la vez – por ejemplo Passenger y JRuby necesitan que Rails se cargue en su totalidad. commit

Los asset hosts son más flexibles, con las poisiblidad de declarar un host como un objeto específico que responde a cierta llamada. DHH ha proporcionado un proyecto de ejemplo, asset-hosting-with-minimum-ssl, que demuestra un buen uso de esta funcionalidad. commit

La ubicación de la carpeta de helpers es ahora configurable en una aplicación Rails ajustando ActionController::Base.helpers_dir, lo cual será una bendición para algunas circunstancias poco habituales – el caso de uso original es la construcción de una aplicación Rails que facilita la extensión mediante plugins en lugar de mediante la alteración de la propia aplicación. commit

La generación de tokens de protección contra CSRF se ha simplificado, y ahora Rails utiliza una cadena aleatoria generada por ActiveSupport::SecureRandom en lugar de trastear con los IDs de sesión. Como resultado de esto las opciones :digest y :secret de protect_from_forgery están obsoletas y no surtirán ningún efecto a partir de ahora. commit

Y ya que hablamos de secretos, seguro que algunos encontrarán algún uso original y útil de ActiveSupport::MessageEncryptor, que proporciona una forma sencillo de cifrar información para su almacenamiento en lugares no seguros (como las cookies). commit

La función de Active Support from_xml ya no depende de XmlSimple. En su lugar, Rails ahora incluye un su propia implementación de XmlMini con sólo la funcionalidad necesaria, de forma que Rails puede dejar de incluir la copia de XmlSimple que venía arrastrando. commit commit

Como se recordará, las mejoras de la semana pasada incluyeron el cambio de nombre de application.rb a application_controller.rb. Esta semana hay una nueva tarea de Rake, rake rails:update:application_controller que hace esto automáticamente y que forma parte de la tarea rake rails:update. commit

Hay buenas noticias si usamos ActiveSupport::OrderedHash: por fin implementa each_key y each_value. commit

Se ha internacionalidado un poquito más del core de Rails: las unidades usadas por number_to_human_size. Si mantienes un archivo de traducciones, ahora tienes que añadir las traducciones de las unidades de almacenamiento: bytes, KB, MB, GB, TB. commit

Por fin ha desaparecido el soporte de los componentes en Rails, que fueron en su momento según «Agile Web Development wih Rails» un brillante ejemplo de lo que ocurre cuando la ambición se impone a la prudencia. Por si un par de años de advertencia sobre lo que iba a ocurrir no fue suficiente, ahora es el momento de encontrar una solución alternativa. commit

Han dejado de generarse por defecto un par de archivos en /public que tenían que ver con los dispatchers de CGI y FCGI. De todas formas, si te hace falta, puedes obtenerlos añadiendo la opción --with-dispatches al ejecutar el comando rails, o bien generarlos después usando rake rails:generate_dispatchers). commit commit



Leave a Reply