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
- Introdução
- Principais Novidades do Rails 8
- Dicas para Atualizar Sistemas Antigos para o Rails 8
- 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
edelete_multi
deActiveSupport::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
efloat8
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
eunsigned_decimal
foram depreciados, seguindo as mudanças no MySQL 8.0.17.
Action View
1. Renomeação de Métodos
text_area
paratextarea
: Os métodostext_area
foram renomeados paratextarea
para alinhar com as convenções HTML. Os nomes antigos ainda estão disponíveis como aliases.check_box
paracheckbox
: Similarmente, os métodoscheck_box
foram renomeados paracheckbox
.
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
emresource
eresources
gera umArgumentError
, 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 adaptadorsucker_punch
foi depreciado. Recomenda-se o uso deadapter: async
para funcionalidade semelhante. - Uso de
RAILS_MAX_THREADS
: OActiveJob::AsyncAdapter
agora utilizaRAILS_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:
- 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.
- 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).
- Teste Extensivamente: Utilize uma suíte de testes abrangente para garantir que as funcionalidades existentes continuem operando conforme esperado após a atualização.
- Revise Depreciações: Procure por avisos de depreciação ao executar sua aplicação e atualize o código conforme necessário.
- 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.
- Verifique Configurações Personalizadas: Se você personalizou configurações ou utilizou APIs internas, revise essas áreas cuidadosamente, pois elas podem ter mudado.
- 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.
- Planeje Tempo Adequado: Reserve tempo suficiente para a atualização, testes e possíveis correções de bugs que possam surgir.
- 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.
- 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.