Upgrade do Rails 4.2.7 para o Rails 5.2.6
Published: 2021-11-24 20:17:37

Hi guys! Espero que vocês estejam bem e seguros. 😃 Bom, esses dias recebi a missão de atualizar as versões do ruby (2.3.7 para 2.6.6) e rails (7.2.7 para 5.2.6) em um dos projetos do trabalho. Tinha em mente que iria ser chatinho e cansativo, mas não imaginava que tanto, kkkkkk.

Irei abordar os pontos que considero importantes e que gostaria de ter ouvido antes de iniciar esta jornada. 😃 

Inicialmente testei o simples, adicionei no Gemfile as versões que desejava do ruby e rails, e em seguida executei o ``bundle install`` para atualizar as novas versões no Gemfile.Lock. Obtive como resposta vários erros sobre as versões das gems, isso porque as versões que estavam no projeto não suportavam o rails 5.x ou estavam depreciadas.

Iniciei as atualizações das gems pelo bundler, adicionando uma versão compatível e estável com a versão do rails 5.x. Esse é um ponto importante pois algumas versões de gems necessitam de uma versão mais atualizada do bundler. Eu por exemplo, atualizei da versão ‘1.17.3’ para '~> 2.1', '>= 2.1.4' e em seguida executei o ``bundle install``, obtive alguns erros mas esperado pois não tinha atualizado as demais gems. E assim fui atualizando as versões das gems de cima para baixo, adicionando versões compatíveis e estáveis com a versão do rails 5.x, utilizando o RubyGems e documentação das próprias como referência.

Algumas gems podem estar depreciadas, por exemplo, a ``gem 'quiet_assets'``, o próprio rails agora tem uma solução. Neste caso não será necessário encontrar uma substituta, mas em outros casos pode ser necessário. Depois de atualizar algumas versões, rodei o ``bundle install`` e obtive o mesmo erro do início, mesmo não sendo recomendado pela comunidade, decidi pela exclusão do Gemfile.Lock e rodar novamente o ``bundle install``, a partir daí consegui rodar e gerar um novo Gemfile.Lock atualizado 😃 . Agora vamos para as configurações.

Na [documentação](https://guiarails.com.br/upgrading_ruby_on_rails.html#:~:text=1.4%20A%20Tarefa%20de%20Atualiza%C3%A7%C3%A3o) do Rails podemos encontrar os próximos passos. Quando rodar o ``rails app:update`` será apresentado no terminal alguns ajustes que podem ser realizados nos arquivos já existentes, neste momento você deve ter cuidado principalmente nas configs e não terminar modificando as configurações personalizadas do projetos, tente mudar o mínimo possível e consulte a [documentação](https://guiarails.com.br/upgrading_ruby_on_rails.html) sempre sobre alguma mudança nas configurações padrões do Rails. Também serão adicionados novos arquivos.

O próximo passo foi rodar o ``rails server``, apareceram outros erros por causa de código depreciado. O primeiro foi o ``alias_method_chain`` que foi [desatualizado](https://api.rubyonrails.org/v5.0.0/classes/Module.html#:~:text=alias_method_chain(target%2C%20feature)). O segundo foi com o ActiveRecord::Migration não ser suportado, sendo assim necessario atualização das migrations para ActiveRecord::Migration[5.2], nesse [link](https://stackoverflow.com/questions/48815984/rails5-directly-inheriting-from-from-activerecordmigration-is-not-supported-s) tem um exemplo de como faz.

Depois desses ajustes consegui iniciar o servidor, agora é testar todo projeto, não deixar escapar nenhum detalhe, todas funcionalidades devem ser testadas. Essa parte é importante para analisar se está tudo funcionando ou se será necessário ajustes, por exemplo pode ocorrer de uma funcionalidade não está funcionando no projeto porque a gem não é mais utilizada daquela forma e será necessário atualização no código para usar aquela gem.

Por não conter testes no projeto, foi necessário uma bateria extensa de testes.

**REFERENCIA BIBLIOGRAFICA**
Atualizando o Ruby on Rails - https://guiarails.com.br/upgrading_ruby_on_rails.html
RubyGems -https://rubygems.org/ 
Descontinuação do alias_method_chain - https://api.rubyonrails.org/v5.0.0/classes/Module.html#:~:text=alias_method_chain(target%2C%20feature)
ActiveRecord::Migration is not supported - https://stackoverflow.com/questions/48815984/rails5-directly-inheriting-from-from-activerecordmigration-is-not-supported-s
Descontinuação do before_filter - https://stackoverflow.com/questions/41572287/deprecation-warning-before-filter-is-deprecated-and-will-be-removed-in-rails-5