Ruby on Rails 8: Principais Novidades e Dicas de Atualização

Ruby on Rails 8 chegou trazendo uma série de melhorias e novidades que prometem tornar o desenvolvimento web ainda mais eficiente e produtivo. Neste artigo, exploraremos as principais mudanças introduzidas nesta nova versão e forneceremos dicas valiosas para ajudar você a atualizar seus sistemas antigos para o Rails 8.

Sumário

  1. Introdução
  2. Principais Novidades do Rails 8
  3. Dicas para Atualizar Sistemas Antigos para o Rails 8
  4. Conclusão

Introdução

Ruby on Rails é um dos frameworks web mais populares, conhecido por sua filosofia de "convenção sobre configuração" e por acelerar o processo de desenvolvimento. A versão 8 do Rails traz aprimoramentos significativos em diversas áreas, desde melhorias de desempenho até a introdução de novos recursos que facilitam a vida dos desenvolvedores.

Neste artigo, vamos nos aprofundar nas principais novidades do Rails 8 e oferecer orientações práticas para atualizar aplicações existentes, garantindo uma transição suave para esta nova versão.

Principais Novidades do Rails 8

Active Support

1. Remoção de Funcionalidades Obsoletas

  • Arrays em ActiveSupport::Deprecation#warn: O suporte a passagem de um array de strings para ActiveSupport::Deprecation#warn foi removido, incentivando o uso de mensagens de depreciação mais claras.
  • Formato de Nomeação de Atributos Internos: O suporte a attr_internal_naming_format com prefixo @ foi eliminado, padronizando a forma como os atributos internos são nomeados.
  • ActiveSupport::ProxyObject: Esta classe foi removida, simplificando a hierarquia de objetos proxy.

2. Otimizações de Desempenho

  • Watcher de I18n: O watcher de internacionalização não é mais executado durante o boot da aplicação, o que melhora o tempo de inicialização, especialmente em aplicações com muitas traduções.
  • HashWithIndifferentAccess: O método stringify_keys agora converte todas as chaves em strings, não apenas símbolos, corrigindo comportamentos inesperados.

3. Melhorias em Instrumentação e Logging

  • Instrumentação de Cache: Os métodos delete e delete_multi de ActiveSupport::Cache::Store agora incluem opções ao serem instrumentados, fornecendo mais contexto durante o monitoramento.
  • Exibição de Nomes de Testes: Ao executar testes com rails test -v em modo paralelo, os nomes dos testes são exibidos, facilitando a identificação.

Active Model

1. Novas Opções de Validação

  • Token Padrão para Reset de Senha: A introdução de um gerador de token padrão facilita a implementação de funcionalidades de reset de senha usando has_secure_password.

:except_on: Agora é possível usar :except_on em validações para especificar contextos nos quais a validação deve ser ignorada. Por exemplo:

class User < ApplicationRecord
  validates :birthday, presence: { except_on: :admin }
end

Active Record

1. Melhorias em Migrações e Esquemas

  • Carregamento de Seeds: O task db:prepare não carrega mais seeds ao criar um banco de dados não primário, evitando perda potencial de dados em ambientes existentes.

Suporte a Várias Tabelas em drop_table: Agora é possível passar um array de nomes para drop_table, permitindo a remoção de múltiplas tabelas em uma única chamada.

ActiveRecord::Base.connection.drop_table(:users, :posts)

2. Novas Funcionalidades em Consultas

  • Otimizações em in_order_of: Adicionada a opção de filtro para priorizar certos valores na ordenação sem filtrar os resultados.
  • Suporte a Hashes em pluck: pluck agora aceita argumentos de hash com valores de símbolos e strings, aumentando a flexibilidade nas consultas.

3. Melhorias em Tipos e Colunas

  • Distinção entre float4 e float8 no PostgreSQL: Agora o Active Record distingue corretamente entre os tipos de ponto flutuante do PostgreSQL.
  • Depreciação de Métodos: Os métodos unsigned_float e unsigned_decimal foram depreciados, seguindo as mudanças no MySQL 8.0.17.

Action View

1. Renomeação de Métodos

  • text_area para textarea: Os métodos text_area foram renomeados para textarea para alinhar com as convenções HTML. Os nomes antigos ainda estão disponíveis como aliases.
  • check_box para checkbox: Similarmente, os métodos check_box foram renomeados para checkbox.

2. Melhorias no DependencyTracker

  • Renderização com Interpolação: O DependencyTracker agora avalia corretamente renders com interpolação, garantindo que todas as dependências sejam rastreadas.

Action Pack

1. Atualizações em Rotas

  • Correção em Rotas com ::: Problemas em rotas contendo :: foram corrigidos, permitindo rotas mais complexas.
  • Argumentos Inválidos em Recursos: Agora, passar opções inválidas como :only ou :except em resource e resources gera um ArgumentError, ajudando a identificar erros de configuração.

2. Novos Métodos de Parâmetros

params#expect: Introduzido um método mais seguro e explícito para manipulação de parâmetros, substituindo params.require e params.permit.

params.expect(person: [:name, :age, pets: [[:name]]])

3. Melhorias em Testes

  • Atualização de Cookies em Requisições Não-GET: Correção em ActionController::TestCase para garantir que cookies sejam atualizados corretamente em requisições de outros métodos HTTP.

Active Job

1. Atualizações em Adaptadores

  • Depreciação do sucker_punch: O adaptador sucker_punch foi depreciado. Recomenda-se o uso de adapter: async para funcionalidade semelhante.
  • Uso de RAILS_MAX_THREADS: O ActiveJob::AsyncAdapter agora utiliza RAILS_MAX_THREADS, com valor padrão de 5 se não definido.

Railties

1. Novos Geradores e Configurações

Script Generator: Adicionada uma pasta script e um gerador de scripts para facilitar a criação de scripts únicos ou de propósito geral.

bin/rails generate script my_script

Gerador de Autenticação: Um novo gerador para iniciar um sistema básico de autenticação usando sessões e reset de senha.

bin/rails generate authentication

2. Alterações em Configurações Padrão

  • Uso do Solid Cable e Solid Queue: O Rails 8 agora usa o Solid Cable como adaptador padrão do Action Cable e o Solid Queue como backend padrão do Active Job, ambos configurados para melhorar o desempenho sem depender de Redis.

3. Melhorias em Desempenho

  • Deferimento de Rotas: O carregamento das rotas é adiado para a primeira requisição ou quando url_helpers são chamados, melhorando o tempo de boot em aplicações maiores.

Dicas para Atualizar Sistemas Antigos para o Rails 8

Atualizar uma aplicação existente para uma nova versão do Rails pode ser desafiador. Aqui estão algumas dicas para facilitar esse processo:

  1. Leia as Notas de Versão: Antes de iniciar, leia cuidadosamente as notas de versão do Rails 8 para entender todas as mudanças e depreciações.
  2. Atualize Gradualmente: Se sua aplicação está em uma versão muito antiga, considere atualizar para versões intermediárias primeiro (por exemplo, do Rails 5 para o 6, depois para o 7, e finalmente para o 8).
  3. Teste Extensivamente: Utilize uma suíte de testes abrangente para garantir que as funcionalidades existentes continuem operando conforme esperado após a atualização.
  4. Revise Depreciações: Procure por avisos de depreciação ao executar sua aplicação e atualize o código conforme necessário.
  5. Atualize Dependências: Certifique-se de que todas as gemas e bibliotecas externas sejam compatíveis com o Rails 8, atualizando-as para versões mais recentes quando necessário.
  6. Verifique Configurações Personalizadas: Se você personalizou configurações ou utilizou APIs internas, revise essas áreas cuidadosamente, pois elas podem ter mudado.
  7. Considere as Novas Funcionalidades: Aproveite a atualização para refatorar partes da aplicação que podem se beneficiar das novas funcionalidades introduzidas no Rails 8.
  8. Planeje Tempo Adequado: Reserve tempo suficiente para a atualização, testes e possíveis correções de bugs que possam surgir.
  9. Colabore com a Equipe: Envolva outros desenvolvedores do seu time no processo de atualização para compartilhar conhecimentos e agilizar a resolução de problemas.
  10. Faça Backup: Sempre faça backup do banco de dados e do código antes de iniciar o processo de atualização.

Conclusão

O Ruby on Rails 8 traz avanços significativos que podem melhorar a eficiência e a produtividade no desenvolvimento web. Com novas funcionalidades, otimizações de desempenho e melhorias na segurança, é uma atualização que vale a pena considerar.

Ao planejar e executar cuidadosamente a atualização de sistemas antigos, você pode aproveitar ao máximo os benefícios desta nova versão, garantindo que sua aplicação permaneça moderna, segura e eficiente.

Esperamos que este artigo tenha fornecido insights valiosos sobre as novidades do Rails 8 e orientações úteis para facilitar o processo de atualização. Mantenha-se sempre atualizado com as últimas tendências e boas práticas para continuar desenvolvendo aplicações web de alta qualidade.