Atualizando uma app Ruby on Rails antiga

Depois da última aula do Curso OOP + Solid em Ruby, nosso professor (@serradura) nos disse para aplicarmos o conhecimento aprendido no curso numa app criada pelo mesmo chamada rails_app_to_refactor, uma app feita para serem feitas experimentações nela….

Depois da última aula do Curso OOP + Solid em Ruby, nosso professor (@serradura) nos disse para aplicarmos o conhecimento aprendido no curso numa app criada pelo mesmo chamada rails_app_to_refactor, uma app feita para serem feitas experimentações nela.

Qual o problema que precisamos resolver?

A app está com as versões do Ruby e do Rails defasadas e para usar tudo que aprendemos no curso precisamos que a versão do ruby seja a 3.1.2

Como resolver?

Poderíamos resolver de dois jeitos:

  • Reescrever a app num ruby maior
  • Atualizar a app para um ruby maior

Para mim eu achei um desperdício reescrever toda a app, sendo que todos os testes já foram criados, todos os casos de uso, etc.
Logo (pelo título também dá para saber) eu escolhi a opção de atualizar.

Como foi o processo de atualização do Rails?

Em primeiro lugar eu removi o Gemfile.lock e rodei um bundle install porque estava dando erro no mimemagic.

Depois disso eu segui o que dizia no fastruby.io e atualizei pro rails 6.1. Resolvi não seguir o dual boot por ser uma app simples, mas se fosse uma app do mundo real eu teria feito para não prejudicar os clientes da minha app.

Após isso os testes não estavam passando por conta de que a gem DidYouMean se integrou no Rails, aí a mensagem foi alterada para: (exemplo) {"error": "Invalid parameter. Did you mean something?"}

Com esse erro aprendi o que uma indireção pode custar para um projeto (demorei muito para encontrar a raiz).

Para solucionar precisei no arquivo app/controllers/application_controller.rb mudar para o seguinte:

  message.gsub(/\s*Did\ you\ mean\?\ (.|\s)*/, "")

Após isso os testes voltaram a passar e em seguida adicionei o:

  config.load_defaults 6.1

para funcionar sem problemas, rodei os testes novamente, e bora para a próxima fase.

Nisso eu atualizei para o Rails 7 alterando no Gemfile a versão do rails, rodando bundle install e rodando a rake rails app:update como foi me ensinado no fastruby.

Após comparar vários diffs, verificar o que o Rails quer substituir e ver se faz sentido, cheguei ao Rails 7

Até aqui os testes estavam passando, então parti para a atualização do ruby.

Como foi o processo da atualização do Ruby?

Na atualização do Ruby meu objetivo era chegar no 3.1.2, mas primeiro tive que passar pelo 3.0.0

Primeiro tive que baixar a versão 3.0.0 no meu gerenciador de versões de Ruby, depois alterei o Gemfile para o Ruby 3.0.0 e alterei o arquivo .ruby-version para ruby-3.0.0.

Após isso, rodei gem install bundler:2.2.32 porque o Ruby 3.0.0 não tinha o bundler que eu estava. Logo depois rodei bundle.

Após verificar os testes, percebi que alguns pararam de passar.

O Error era o famoso ArgumentError nos métodos http, e estava acontecendo porque antes o ruby transformava um hash em kwargs(keyword arguments), mas no ruby 3.0.0 ele não convertia, por isso minha solução foi remover os {} blocos nas partes dos testes. Para exemplificar mostrarei o antes e o depois.

Antes:

post todos_url, {
  headers: { 'Authorization' => "Bearer token=\"#{user.token}\"" },
  params: { todo: { title: '' } }
}

Depois:

post todos_url,
  headers: { 'Authorization' => "Bearer token=\"#{user.token}\"" },
  params: { todo: { title: '' } }

Assim todos os testes voltaram a passar.

Para atualizar pro ruby 3.1.2 eu tive que fazer os primeiros 3 parágrafos desse tópico a diferença é que agora era 3.1.2.
O bundle não funcionou por conta de uma dependência chamada sexp_processor que a versão que estava não funcionava na versão 3.1.2.
Eu resolvi isso rodando um bundle update rodei os testes e tudo voltou a passar.

Disclaimer: quando disse que rodei os testes cada uma das vezes significa que eu rodei o rails t e fiz os curls disponíveis no README.md

Voltando ao Rails

Eu estava com uma dúvida na minha cabeça se o DidYouMean ainda estava integrado ao Rails e descobri que não. Nisso eu removi aquela regex maluca e continuou a funcionar.

O Pull Request

Ao fazer o PR, percebi que eu havia removido sem querer em uma das versões a seguinte config:

  config.action_mailer.delivery_method = :letter_opener

Para consertar eu errei e deixei no config/application.rb. E funcionou, o problema foi que o lugar certo era no config/environments/development.rb, mas foi percebido pelo revisor do PR e consertado.

No momento que eu escrevo o PR já foi mergeado.

Você pode ver ele acessando aqui

Referências

Para chegar a todo esse resultado eu precisei de várias pesquisas e nada mais justo do que deixar elas para beneficiar quem precisa também.

É isso pessoal, espero que vocês gostem deste artigo, até a próxima e tchau.


Print Share Comment Cite Upload Translate
APA
Vinícius Bispo | Sciencx (2024-03-28T13:31:18+00:00) » Atualizando uma app Ruby on Rails antiga. Retrieved from https://www.scien.cx/2022/12/17/atualizando-uma-app-ruby-on-rails-antiga/.
MLA
" » Atualizando uma app Ruby on Rails antiga." Vinícius Bispo | Sciencx - Saturday December 17, 2022, https://www.scien.cx/2022/12/17/atualizando-uma-app-ruby-on-rails-antiga/
HARVARD
Vinícius Bispo | Sciencx Saturday December 17, 2022 » Atualizando uma app Ruby on Rails antiga., viewed 2024-03-28T13:31:18+00:00,<https://www.scien.cx/2022/12/17/atualizando-uma-app-ruby-on-rails-antiga/>
VANCOUVER
Vinícius Bispo | Sciencx - » Atualizando uma app Ruby on Rails antiga. [Internet]. [Accessed 2024-03-28T13:31:18+00:00]. Available from: https://www.scien.cx/2022/12/17/atualizando-uma-app-ruby-on-rails-antiga/
CHICAGO
" » Atualizando uma app Ruby on Rails antiga." Vinícius Bispo | Sciencx - Accessed 2024-03-28T13:31:18+00:00. https://www.scien.cx/2022/12/17/atualizando-uma-app-ruby-on-rails-antiga/
IEEE
" » Atualizando uma app Ruby on Rails antiga." Vinícius Bispo | Sciencx [Online]. Available: https://www.scien.cx/2022/12/17/atualizando-uma-app-ruby-on-rails-antiga/. [Accessed: 2024-03-28T13:31:18+00:00]
rf:citation
» Atualizando uma app Ruby on Rails antiga | Vinícius Bispo | Sciencx | https://www.scien.cx/2022/12/17/atualizando-uma-app-ruby-on-rails-antiga/ | 2024-03-28T13:31:18+00:00
https://github.com/addpipe/simple-recorderjs-demo