Migração do Rails 4.2 para 5.0 [Parte 1]

A postagem cobrirá minha experiência. Então, minha experiência, meu projeto, minha migração. Não será o mesmo para você.

Rails 5 ainda estava em beta 1 quando fiz a migração.

Como joias adicionais para Rails, o projeto tem:

  • cancancan
  • inventar
  • devise-i18n
  • Puma
  • rolificar
  • autoprefixer-rails
  • forma simples
  • trilhos estreitos

Nesse ponto, os testes nem são executados.

A propósito, tenho 78 testes.


Inventar

devise-3.5.3/lib/devise/failure_app.rb:9:in `<class:FailureApp>': uninitialized constant ActionController::RackDelegation (NameError)

É devido à remoção de RackDelegation. Parece que foi usado para objeto de solicitação e resposta. Agora existe em todos os controladores.
O PR que o remove.
O problema do tíquete no rastreador.

A solução é usar o branch master no Github.

gem 'devise', github: 'plataformatec/devise', branch: 'master'

Nesse ponto, o teste pode ser executado … com erros, mas executado.

=> 78 examples, 23 failures


Failure/Error: expect(assigns(:organisations)).to eq(organisations)
NoMethodError:
assigns has been extracted to a gem
. To continue using it,
add `gem 'rails-controller-testing'` to your Gemfile.

Auto explicado. Adicionada essa joia.

=> 78 examples, 23 failures

Isso é estranho. Não resolve o problema. O problema parece vir do RSpec.


Vamos atualizar o RSpec para o branch master (o mais recente ainda não suporta Rails 5).

%w[rspec-core rspec-expectations rspec-mocks rspec-rails rspec-support].each do |lib|
gem lib
, github: "rspec/#{lib}", branch: 'master'
end

Ele está instalando uma versão muito antiga (1.x em vez de 4.x) do . Nenhuma nova versão ainda, vamos removê-la por enquanto.guard-rspec

=> 78 examples, 8 failures


Você precisará atualizar para a versão 3web-console

=> 78 examples, 6 failures


Erro do auxiliar de rotas “* _path”

ActionView::Template::Error:
undefined local variable or method `organisations_path' for #<#<Class:0x007ff526bd7248>:0x007ff52abae2e0>

No console, ele existe:

[4] pry(main)> app.organisations_path
=> "/organisations"

Ainda tem o erro, vamos mantê-lo por enquanto.

Observação: mesmo com este erro, o aplicativo parece funcionar corretamente.

Vamos remover os ruídos de advertência obsoletos.

Correções de suspensão de uso

Pedido HTTP ActionController :: TestCase

A mensagem:

DEPRECATION WARNING: ActionController::TestCase HTTP request methods will accept only
keyword arguments
in future Rails versions.

Examples:

get :show, params: { id: 1 }, session: { user_id: 1 }
process
:update, method: :post, params: { id: 1 }

Para mim, foi principalmente mudando de:

get :homepage, {}

para:

get :homepage, params: {}