edge
Más en rubyonrails.org: Más Ruby on Rails

Notas de lanzamiento de Ruby on Rails 4.0

Aspectos destacados en Rails 4.0:

Estas notas de lanzamiento solo cubren los cambios principales. Para conocer las correcciones de errores y cambios diversos, consulte los registros de cambios o revise la lista de confirmaciones en el repositorio principal de Rails en GitHub.

1 Actualización a Rails 4.0

Si está actualizando una aplicación existente, es una buena idea tener una buena cobertura de pruebas antes de comenzar. También debe actualizar primero a Rails 3.2 en caso de que no lo haya hecho y asegurarse de que su aplicación siga funcionando como se espera antes de intentar una actualización a Rails 4.0. Una lista de cosas a tener en cuenta al actualizar está disponible en la guía Actualización de Ruby on Rails.

2 Creación de una aplicación Rails 4.0

# Debe tener instalada la gema 'rails'
$ rails new myapp
$ cd myapp

2.1 Vinculación de gemas

Rails ahora utiliza un Gemfile en la raíz de la aplicación para determinar las gemas que necesita su aplicación para iniciar. Este Gemfile es procesado por la gema Bundler, que luego instala todas las dependencias. Incluso puede instalar todas las dependencias localmente en su aplicación para que no dependa de las gemas del sistema.

Más información: Página principal de Bundler

2.2 Vivir al límite

Bundler y Gemfile hacen que congelar su aplicación Rails sea pan comido con el nuevo comando bundle dedicado. Si desea agrupar directamente desde el repositorio Git, puede pasar la bandera --edge:

$ rails new myapp --edge

Si tiene una copia local del repositorio de Rails y desea generar una aplicación utilizando eso, puede pasar la bandera --dev:

$ ruby /ruta/a/rails/railties/bin/rails new myapp --dev

3 Funcionalidades principales

Rails 4.0

3.1 Actualización

  • Ruby 1.9.3 (confirmación) - Se prefiere Ruby 2.0; se requiere 1.9.3+
  • Nueva política de deprecación - Las características obsoletas son advertencias en Rails 4.0 y se eliminarán en Rails 4.1.
  • Caché de página y acción de ActionPack (confirmación) - La caché de página y acción se extrae a una gema separada. La caché de página y acción requiere demasiada intervención manual (caducar manualmente las cachés cuando se actualizan los objetos de modelo subyacentes). En su lugar, use la caché de muñecas rusas.
  • Observadores de ActiveRecord (confirmación) - Los observadores se extraen a una gema separada. Los observadores solo son necesarios para la caché de página y acción, y pueden generar código espagueti.
  • Almacenamiento de sesión de ActiveRecord (confirmación) - El almacenamiento de sesión de ActiveRecord se extrae a una gema separada. Almacenar sesiones en SQL es costoso. En su lugar, use sesiones de cookies, sesiones de memcache o un almacenamiento de sesión personalizado.
  • Protección de asignación masiva de ActiveModel (confirmación) - La protección de asignación masiva de Rails 3 está obsoleta. En su lugar, use parámetros fuertes.
  • ActiveResource (confirmación) - ActiveResource se extrae a una gema separada. ActiveResource no se usaba ampliamente.
  • vendor/plugins eliminado (confirmación) - Use un Gemfile para administrar las gemas instaladas.

3.2 ActionPack

  • Parámetros fuertes (confirmación) - Solo permita que los parámetros permitidos actualicen objetos de modelo (params.permit(:title, :text)).
  • Preocupaciones de enrutamiento (confirmación) - En el DSL de enrutamiento, factorice subrutas comunes (comments de /posts/1/comments y /videos/1/comments).
  • ActionController::Live (confirmación) - Transmita JSON con response.stream.
  • ETags declarativos (confirmación) - Agregue adiciones de etag a nivel de controlador que formarán parte del cálculo de etag de la acción.
  • Caché de muñecas rusas (confirmación) - Almacene en caché fragmentos anidados de vistas. Cada fragmento caduca en función de un conjunto de dependencias (una clave de caché). La clave de caché suele ser un número de versión de plantilla y un objeto de modelo.
  • Turbolinks (confirmación) - Sirva solo una página HTML inicial. Cuando el usuario navega a otra página, use pushState para actualizar la URL y use AJAX para actualizar el título y el cuerpo.
  • Desacoplar ActionView de ActionController (confirmación) - ActionView se desacopló de ActionPack y se moverá a una gema separada en Rails 4.1.
  • No depender de ActiveModel (confirmación) - ActionPack ya no depende de ActiveModel.

    General

    • ActiveModel::Model (commit) - ActiveModel::Model, una mezcla para hacer que los objetos normales de Ruby funcionen con ActionPack sin problemas (por ejemplo, para form_for).
    • Nueva API de alcance (commit) - Los alcances siempre deben usar funciones llamables.
    • Volcado de caché de esquema (commit) - Para mejorar el tiempo de inicio de Rails, en lugar de cargar el esquema directamente desde la base de datos, cargar el esquema desde un archivo de volcado.
    • Soporte para especificar el nivel de aislamiento de la transacción (commit) - Elija si las lecturas repetibles o el rendimiento mejorado (menos bloqueo) son más importantes.
    • Dalli (commit) - Utilice el cliente de memcache Dalli para la tienda de memcache.
    • Inicio y finalización de notificaciones (commit) - La instrumentación de Active Support informa las notificaciones de inicio y finalización a los suscriptores.
    • Seguridad por defecto (commit) - Rails puede ejecutarse en servidores de aplicaciones con hilos sin configuración adicional.

NOTA: Verifique que las gemas que está utilizando sean seguras para hilos.

  • Verbo PATCH (commit) - En Rails, PATCH reemplaza a PUT. PATCH se utiliza para actualizaciones parciales de recursos.

3.3 Seguridad

  • match no captura todo (commit) - En el DSL de enrutamiento, match requiere que se especifique el verbo o verbos HTTP.
  • Entidades HTML escapadas por defecto (commit) - Las cadenas renderizadas en erb se escapan a menos que se envuelvan con raw o se llame a html_safe.
  • Nuevas cabeceras de seguridad (commit) - Rails envía las siguientes cabeceras con cada solicitud HTTP: X-Frame-Options (evita el clickjacking al prohibir que el navegador incruste la página en un marco), X-XSS-Protection (pide al navegador que detenga la inyección de scripts) y X-Content-Type-Options (evita que el navegador abra un jpeg como un exe).

4 Extracción de características a gemas

En Rails 4.0, varias características se han extraído a gemas. Simplemente agregue las gemas extraídas a su Gemfile para recuperar la funcionalidad.

5 Documentación

  • Las guías se han reescrito en Markdown con formato GitHub.

  • Las guías tienen un diseño receptivo.

6 Railties

Consulte el Registro de cambios para obtener cambios detallados.

6.1 Cambios destacados

  • Nuevas ubicaciones de pruebas test/models, test/helpers, test/controllers y test/mailers. También se agregaron tareas de rake correspondientes. (Pull Request)

  • Los ejecutables de su aplicación ahora se encuentran en el directorio bin/. Ejecute rake rails:update:bin para obtener bin/bundle, bin/rails y bin/rake.

  • Seguridad por defecto

  • Se ha eliminado la capacidad de usar un constructor personalizado pasando --builder (o -b) a rails new. Considere usar plantillas de aplicación en su lugar. (Pull Request)

6.2 Deprecaciones

  • config.threadsafe! está en desuso a favor de config.eager_load, que proporciona un control más detallado sobre qué se carga de forma anticipada.

  • Rails::Plugin ha desaparecido. En lugar de agregar complementos a vendor/plugins, use gemas o bundler con dependencias de ruta o git.

7 Action Mailer

Consulte el Registro de cambios para obtener cambios detallados.

7.1 Cambios destacados

7.2 Deprecaciones

8 Active Model

Consulte el Registro de cambios para obtener cambios detallados.

8.1 Cambios destacados

  • Agregue ActiveModel::ForbiddenAttributesProtection, un módulo simple para proteger los atributos de la asignación masiva cuando se pasan atributos no permitidos.

  • Se agregó ActiveModel::Model, una mezcla para hacer que los objetos de Ruby funcionen con Action Pack sin problemas.

8.2 Deprecaciones

9 Active Support

Consulte el Registro de cambios para obtener cambios detallados.

9.1 Cambios destacados

  • Reemplace la gema memcache-client obsoleta por dalli en ActiveSupport::Cache::MemCacheStore.

  • Optimice ActiveSupport::Cache::Entry para reducir la memoria y la sobrecarga de procesamiento.

  • Las inflexiones ahora se pueden definir por localidad. singularize y pluralize aceptan la localidad como un argumento adicional.

  • Object#try ahora devolverá nil en lugar de generar un NoMethodError si el objeto receptor no implementa el método, pero aún puede obtener el comportamiento anterior utilizando el nuevo Object#try!.

  • String#to_date ahora lanza ArgumentError: invalid date en lugar de NoMethodError: undefined method 'div' for nil:NilClass cuando se le proporciona una fecha inválida. Ahora es igual que Date.parse y acepta más fechas inválidas que en la versión 3.x, como:

    # ActiveSupport 3.x
    "asdf".to_date # => NoMethodError: undefined method `div' for nil:NilClass
    "333".to_date # => NoMethodError: undefined method `div' for nil:NilClass
    
    # ActiveSupport 4
    "asdf".to_date # => ArgumentError: invalid date
    "333".to_date # => Fri, 29 Nov 2013
    

9.2 Deprecaciones

  • Se deprecia el método ActiveSupport::TestCase#pending, en su lugar se debe usar skip de minitest.

  • ActiveSupport::Benchmarkable#silence ha sido deprecado debido a su falta de seguridad en hilos. Será eliminado sin reemplazo en Rails 4.1.

  • ActiveSupport::JSON::Variable está deprecado. Define tus propios métodos #as_json y #encode_json para literales de cadena JSON personalizados.

  • Se deprecia el método de compatibilidad Module#local_constant_names, en su lugar se debe usar Module#local_constants (que devuelve símbolos).

  • ActiveSupport::BufferedLogger está deprecado. Usa ActiveSupport::Logger o el registro de la biblioteca estándar de Ruby.

  • Se deprecia assert_present y assert_blank en favor de assert object.blank? y assert object.present?

10 Action Pack

Consulta el Changelog para obtener cambios detallados.

10.1 Cambios destacados

  • Cambia la hoja de estilos de las páginas de excepción para el modo de desarrollo. Además, muestra también la línea de código y el fragmento que generó la excepción en todas las páginas de excepción.

10.2 Deprecaciones

11 Active Record

Consulta el Changelog para obtener cambios detallados.

11.1 Cambios destacados

  • Mejora las formas de escribir migraciones change, haciendo que los antiguos métodos up y down ya no sean necesarios.

    • Los métodos drop_table y remove_column ahora son reversibles, siempre y cuando se proporcione la información necesaria. El método remove_column solía aceptar múltiples nombres de columna; en su lugar, usa remove_columns (que no es reversible). El método change_table también es reversible, siempre y cuando su bloque no llame a remove, change o change_default.
    • El nuevo método reversible permite especificar código que se ejecutará al migrar hacia arriba o hacia abajo. Consulta la Guía de migraciones
    • El nuevo método revert revertirá una migración completa o el bloque dado. Si se está migrando hacia abajo, la migración/bloque dado se ejecutará normalmente. Consulta la Guía de migraciones
  • Agrega soporte para el tipo de array de PostgreSQL. Se puede utilizar cualquier tipo de dato para crear una columna de array, con soporte completo de migración y volcado de esquema.

  • Agrega Relation#load para cargar explícitamente el registro y devolver self.

  • Model.all ahora devuelve una ActiveRecord::Relation, en lugar de un array de registros. Usa Relation#to_a si realmente quieres un array. En algunos casos específicos, esto puede causar problemas al actualizar.

  • Se agregó ActiveRecord::Migration.check_pending! que genera un error si hay migraciones pendientes.

  • Se agregó soporte para codificadores personalizados en ActiveRecord::Store. Ahora puedes configurar tu codificador personalizado de la siguiente manera:

    store :settings, accessors: [ :color, :homepage ], coder: JSON
    
  • Las conexiones mysql y mysql2 establecerán SQL_MODE=STRICT_ALL_TABLES de forma predeterminada para evitar la pérdida silenciosa de datos. Esto se puede desactivar especificando strict: false en tu database.yml.

  • Se eliminó IdentityMap.

  • Se eliminó la ejecución automática de consultas EXPLAIN. La opción active_record.auto_explain_threshold_in_seconds ya no se utiliza y se debe eliminar.

  • Se agregó ActiveRecord::NullRelation y ActiveRecord::Relation#none implementando el patrón de objeto nulo para la clase Relation.

  • Se agregó el ayudante de migración create_join_table para crear tablas de unión HABTM.

  • Permite crear registros hstore de PostgreSQL.

11.2 Deprecaciones

  • Se deprecó la API de búsqueda basada en hash de estilo antiguo. Esto significa que los métodos que anteriormente aceptaban "opciones de búsqueda" ya no lo hacen.

  • Todos los métodos dinámicos, excepto find_by_... y find_by_...!, están deprecados. Así es como puedes reescribir el código:

    • find_all_by_... se puede reescribir usando where(...).
    • find_last_by_... se puede reescribir usando where(...).last.
    • scoped_by_... se puede reescribir usando where(...).
    • find_or_initialize_by_... se puede reescribir usando find_or_initialize_by(...).
    • find_or_create_by_... se puede reescribir usando find_or_create_by(...).
    • find_or_create_by_...! se puede reescribir usando find_or_create_by!(...).

12 Créditos

Consulta la lista completa de colaboradores de Rails para conocer a las muchas personas que dedicaron muchas horas para hacer de Rails el marco estable y robusto que es. Felicitaciones a todos ellos.

Comentarios

Se te anima a ayudar a mejorar la calidad de esta guía.

Por favor, contribuye si encuentras algún error tipográfico o factual. Para empezar, puedes leer nuestra contribución a la documentación sección.

También puedes encontrar contenido incompleto o desactualizado. Por favor, añade cualquier documentación faltante para main. Asegúrate de revisar Edge Guides primero para verificar si los problemas ya están resueltos o no en la rama principal. Consulta las Directrices de las Guías de Ruby on Rails para el estilo y las convenciones.

Si por alguna razón encuentras algo que corregir pero no puedes solucionarlo tú mismo, por favor abre un problema.

Y por último, cualquier tipo de discusión sobre la documentación de Ruby on Rails es muy bienvenida en el Foro oficial de Ruby on Rails.