Skip to content

2019_05 Actualizando a rails 5

Vladimir Támara Patiño edited this page Sep 3, 2020 · 1 revision

Algunas ayudas que nos han facilitado migrar motores y aplicaciones basadas en sip a Rails 5:

General

Antes de modificar Gemfile con

gem "rails", '~> 5.0.0'

recomendamos leer y aplicar http://guides.rubyonrails.org/upgrading_ruby_on_rails.html

Al ejecutar desde el directorio de la aplicación

rails app:update

definitivamente no es buena idea permitirle modificar config/boot.rb, config/application.rb, config/routes.rb, config/initializers/inflections.rb ni config/environment.rb. Los único cambios a estos archivos por hacer manualmente son en config/application.rb y config/environment.rb remplazando:

require File.expand_path('../boot', __FILE__)

por

require_relative 'boot'

En el archivo config/initializers/new_framework_defaults.rb quedarán varias líneas en false, que debe ir poniendo en true y probando a medida que cambia.

Modelos

De config/application.rb se ha eliminado

config.active_record.raise_in_transactional_callbacks = true

Tardecito pero notamos que desde Rails 5 las asociaciones belongs_to que pueden ser NULL deben tener optional: true. Ver https://blog.bigbinary.com/2016/02/15/rails-5-makes-belong-to-association-required-by-default.html

Controladores

before_filter se puede cambiar directo por before_action

Vistas

Hemos notado que ya no se requiere en el Gemfile:

gem "jquery-ui-bootstrap-rails", git: "https://github.com/kristianmandrup/jquery-ui-bootstrap-rails"

y por tanto tampoco en stylesheet/application.css:

 *= require ui-bootstrap/jquery-ui-bootstrap
 *= require ui-bootstrap/ui-wijmo

ni su análogo en app/assets/javascript/applicacion.js

Turbolinks 5 nos ha parecido que si acelera la carga de páginas, pero en aplicaciones que tienen enlaces a anclas de la misma página o a '#' hay problemas con turbolinks 5.0.0 (ver https://github.com/turbolinks/turbolinks/issues/75 ). En algunos casos hemos tenido que dejar turbolinks 2.5.3.

Para que los motores y aplicaciones estén listos para cualquiera de los dos, en app/assets/javascripts/motor/application.js o app/assets/javascript/application.js es bueno cambiar:

$(document).on('ready page:load', function() {

por

$(document).on('turbolinks:load ready page:load', function() {

Pruebas

Para probar controladores en la sección de pruebas del Gemfile incluimos:

gem 'rails-controller-testing'

Debe ejecutar desde el directorio de aplicación:

bin/rails db:environment:set RAILS_ENV=test

Y las pruebas a controladores ahora requieren que los métodos get, put y delete tengan parámetros params y session explícitos, así se convierte:

  get :index, {}, valid_session 

a

  get :index, params: {}, session: valid_session

Desarrollo

Nos ha ido bien empleando puma en lugar de webrick. Para esto ha bastado

  1. Incluir gem 'puma' en Gemfile
  2. En directorio de aplicación copiar config/puma.rb de otra aplicación Rails 5.
Clone this wiki locally