Estamos en pleno mes de diciembre, lo que significa que en pocos días saldrá una nueva versión de Ruby. Incluso si no planeas actualizar tus aplicaciones Rails a la última versión el primer día, nunca es mal momento para empezar a planificar tu próxima actualización.
¿Por qué actualizar Ruby?
Cada año, el equipo del núcleo de Ruby introduce nuevas características para impulsar el lenguaje. A veces, se trata de nuevas construcciones de programación para hacer más fácil tu vida como desarrollador. Otras veces, estos cambios se traducen en mejoras de rendimiento y fiabilidad general. ¿No es genial cuando un pequeño trabajo de actualización puede hacer que tu aplicación Rails sea más rápida, o cuando una nueva característica del lenguaje simplifica un enfoque anteriormente complejo a una simple línea o dos de código?
Los lanzamientos de Ruby a lo largo del año también proporcionan importantes actualizaciones de seguridad en el lenguaje, que se extienden a tus aplicaciones y a las personas que las utilizan. Asegurarse de que todas las capas de su aplicación son seguras es tan importante como evitar la inyección SQL y las vulnerabilidades de scripting entre sitios. Mantenerse al día con las versiones soportadas de Ruby es clave.
Y a veces, tu mano se ve forzada por una dependencia, o una dependencia de esa dependencia. Tal vez te ha pasado: quieres integrar una biblioteca de terceros en tu aplicación, pero no puedes, porque requiere un Ruby más reciente que el que estás ejecutando actualmente. ¿Pasas tu tiempo bifurcando y retroportando la biblioteca para soportar tu base de código más antigua, o actualizas tu base de código para aprovechar el ecosistema Ruby actual?
Cuándo actualizar Ruby
Las nuevas versiones principales (por ejemplo, 2.2, 2.3 y 2.4) se lanzan tradicionalmente el 25 de diciembre de cada año. Mirando las últimas versiones mayores de Ruby, puedes esperar soporte de seguridad para un determinado Ruby durante unos tres años después de su lanzamiento inicial. Si puedes, actualiza tu Ruby antes de que esa ventana de soporte expire.
Incluso en proyectos conservadores, me siento cómodo actualizando a una determinada versión de Ruby alrededor de un año después de su lanzamiento inicial. Eso da tiempo a que se corrijan los errores de esa versión, así como a que los autores de gemas hagan las actualizaciones necesarias para soportar un Ruby más reciente.
Cuándo no actualizar Ruby
Un consejo: No actualices la versión de Ruby al mismo tiempo que la de Rails. Incluso si la versión de Rails a la que te estás actualizando requiere una determinada versión de Ruby, actualiza y libera tu versión de Ruby primero y luego aborda la actualización de Rails. Es probable que la actualización sea mucho más difícil si se intenta hacer de una sola vez, en lugar de por pasos.
He tenido bastante suerte actualizando varias versiones a la vez, por ejemplo, de Ruby 2.1 a Ruby 2.4, pero otros intentos de hacerlo me han causado problemas, como pasar de Ruby 1.8 a 2.0. En caso de duda, divide la actualización en trozos más pequeños. Casi siempre encuentro que las actualizaciones incrementales van más fluidas que los enfoques globales.
Prepárate
Antes de hacer cualquier actualización, es una buena idea leer lo que hay de nuevo-características, correcciones, desapariciones, y cosas que simplemente ya no funcionarán. Las versiones preliminares de Ruby comienzan a salir con meses de antelación, y muchos blogueros se toman el tiempo de explorar las novedades, así que busca qué hay de nuevo en ruby x.y para tener una idea de lo que tus compañeros rubyistas están encontrando. El feed de noticias en el sitio web oficial de Ruby también publica anuncios de cada versión, junto con lo que hay de nuevo en ellos.
Y, como cualquier actualización, querrás un conjunto de pruebas tan completo como sea posible para tu aplicación-incluso si tu propio código de aplicación no requiere muchos cambios para ajustarse al nuevo Ruby, tus dependencias pueden haber sufrido cambios más profundos. O tal vez tengan problemas con la nueva versión de Ruby. Tómate un poco de tiempo para revisar tu situación de pruebas. Utiliza SimpleCov para ayudar a identificar las áreas que tienen poca cobertura. Intenta rellenar los huecos, o al menos probar manualmente esas áreas un poco más de lo habitual. (Y si necesitas ayuda para empezar con las pruebas, conozco un buen libro sobre el tema, wink wink.)
Cómo actualizar Ruby
Para empezar, instala el Ruby objetivo en tu configuración de desarrollo, utilizando tu gestor de versiones de Ruby de elección (o a través de una imagen Docker, si eso es lo tuyo). Vea las instrucciones para RVM, rbenv y chruby para más detalles.
Ahora es un buen momento para especificar también la nueva versión de Ruby en su archivo .ruby-version
, y/o en su Gemfile
(preferido por Heroku). De cualquier manera, es probable que esté reemplazando un valor antiguo por uno nuevo. Verifica el cambio recargando el directorio:
A continuación, instala Rails y las demás dependencias de tu aplicación en el nuevo entorno Ruby:
Aquí es donde las cosas pueden complicarse, especialmente si incluyes alguna versión de gema que no soporte el nuevo Ruby. He abordado esto de dos maneras diferentes en proyectos de actualización. En algunos casos, he actualizado gemas individuales hasta que todas las dependencias pueden instalarse. Con las nuevas versiones de Bundler, el modo de actualización conservador, que evita que las dependencias compartidas también se actualicen, me ha funcionado bien.
En algunos casos, puede que acabes necesitando utilizar el modo conservador, y luego actualizar gemas individuales para abordar otros cambios. Por ejemplo, cuando actualicé una aplicación a Ruby 2.4 a principios de este año, tuve que actualizar por separado la gema simple_form para hacer frente a una deprecación.
Con todo instalado, estás listo para ejecutar tu conjunto de pruebas. En primer lugar, asegúrate de que arranca, y luego observa los fallos y las advertencias de desaprobación. Si has leído sobre el nuevo Ruby al que te estás actualizando, los fallos y advertencias deberían resultarte familiares, y es de esperar que tengas un camino claro para solucionarlos. No ignores las advertencias de desaprobación. Las advertencias de hoy son los fallos de mañana. Tómate el tiempo para limpiarlos ahora, mientras estás en plena actualización de Ruby.
Con un conjunto de pruebas que pasa, libre de advertencias de desaprobación, me gusta ejecutar la aplicación localmente, y encender la consola de Rails, y comprobar si hay otras advertencias de desaprobación en el registro de desarrollo. Esto es especialmente importante si SimpleCov ha detectado lagunas en la cobertura de las pruebas. Si nota nuevas advertencias (o fallos) que no fueron revelados en sus pruebas existentes, haga lo posible por añadir cobertura ahora.
¡Felicidades, su aplicación está actualizada a un Ruby más nuevo y soportado! Tus próximos pasos variarán dependiendo de cómo y dónde se despliegue tu aplicación en el mundo. Los proveedores de plataforma como servicio como Heroku y los despliegues basados en contenedores hacen que esto sea relativamente sencillo Si tienes tus propios servidores, probablemente tendrás un poco más de trabajo que hacer, como conseguir que Ruby, Rails y otras dependencias se instalen en los servidores en cuestión. Eso está fuera del alcance de este artículo.
Una vez hecho, sin embargo, puedes dormir un poco más tranquilo, sabiendo que tu aplicación Rails está usando un Ruby moderno. Gracias por leerlo