Ruby on Rails

A jornada para aprender Ruby on Rails até a criação deste blog

06 Jul 2022

Ruby on Rails sempre foi o meu framework do coração, mas na minha cabeça sempre seria uma paixão distante, da qual demoraria anos e anos para aprender, já que o meu foco era me tornar atrativo para o mercado e existem muito mais oportunidades para iniciantes nas stacks do JavaScript, por exemplo, do que para do Ruby on Rails (mas isso é pauta para outra postagem).

Quando entrei no mercado de trabalho comecei a perceber que eu precisava aprender backend, e por que não ir para o Ruby on Rails? Ele usa conceitos similares ao ASP.NET, por exemplo, e isso me ajudaria no meu trabalho atual. Foi então que finalmente comprei um curso bacana de Ruby e Ruby on Rails e comecei a colocar em prática o que era um sonho distante. Dois meses e meio depois apresento para vocês o meu blog, orgulhosamente desenvolvido com Rails.

Mas por que Ruby on Rails para um simples blog? Essa talvez seja a consideração que eu mais ouvi quando falava sobre esse projeto com pessoas mais experientes, defendendo a possibilidade de criar blog com ferramentas mais simples e mais baratas (já chego nisso), e eu nem precisaria sair do Ruby, como por exemplo o Jekyll. Outros defenderam que não, o Rails existe justamente para esses projetos, e que se eu quisesse fazer algo além de um simples blog, teria em mãos a ferramenta perfeita (chego lá também). Só vou tomar lado nessa treta com mais experiência.

Sempre tinha desenvolvido com Wordpress e tinha tentado criar o meu primeiro blog com Next.js. Mas a proposta de ter tudo que preciso em um monolito, e não espalhando backend e frontend em diferentes sites, me deixou mais à vontade, até porque já tinha decidido deixar o Wordpress para trás na minha história. Eu queria poder criar um blog apenas com o absolutamente essencial, e quem já mexeu com Wordpress sabe que é muito fácil você chegar a dezenas de plugins e um site super pesado. Foi assim então que nasceu este blog.

O que precisa pensar para criar um blog?

Eu sou o tipo de pessoa que assim que aprende algo novo tenta colocar isso em prática. Então durante o aprendizado do Rails sempre parava e falava: "agora eu consigo criar o blog", e sempre faltava alguma coisa. Então aqui vão os conceitos principais que precisei me preocupar para criar o blog:

MVC: o Rails tem geradores poderosos, e você pode facilmente criar um blog com um rails g scaffold. O problema é que você vai acabar precisando ter algum controle do uso de controllers, models e views para fazer coisas diferentes. Por exemplo, para criar o painel administrativo precisei separar os controllers. Para criar estilos diferentes para o painel e para o blog precisei usar partials e fazer o yield de cada um das seções (não sei se foi a melhor ideia, no entanto), além de fazer as relações entre models, a parte que ainda me traz um pouco de insegurança.

O modelo do meu banco de dados. Perceba que a maior complexidade se dá graças ao ActiveStorage e ao ActionText. O blog em si é bem simples.

Autorização: estou criando essa postagem por meio de um painel administrativo que eu mesmo criei. Já imaginou se todo mundo tivesse acesso a ele? Precisei fechar certas localidades do blog para que apenas eu pudesse acessar. Isso é feito por meio do controle de sessão do Rails adicionando um before_action nas ações dos Controller's que queremos proteger.

Autenticação: mas como saber que sou eu que estou iniciando uma sessão? Para isso foi necessário criar um model para usuários. Como é um blog pessoal, deixei ele apenas para criar o meu usuário por meio do rails console mesmo, sem nenhuma interface gráfica.

Importante restringir acesso a parte do seu projeto por meio da autorização e da autenticação.

SEO: Talvez por ter vindo da área do marketing, entendo como é importante que seu site esteja bonito quando for compartilhado no Facebook, no Twitter ou no LinkedIn, e isso é feito adicionando as tags corretas. A única gem do projeto, por enquanto, é a MetaTags, que facilita esse processo e me permitiu alimentar o SEO por meio de tags nas views do blog.

Rich Text: eu poderia simplesmente criar um blog com html e css, para vocês teria o mesmo efeito prático, o site pareceria o mesmo. Mas para mim seria extremamente chato ficar criando uma página html toda vez, me preocupando com tags ou mesmo markdown (apesar de ser mais fácil que HTML). Para isso o Rails tem uma função embutida, o ActionText com o Trix, que permite que eu possa inserir formatação no texto facilmente.

Upload de imagens: outro ponto para facilitar a vida da administração do blog é poder enviar as imagens para as postagens e a imagem destacada do blog sem dor de cabeça (leia-se: precisar enviar manualmente que nem um neandertal). Para isso, o Rails tem o ActiveStorage, que é facilmente instalado. No entanto, fui descobrir quando coloquei em produção que você não pode guardar as imagens (ou arquivos) localmente no servidor. As imagens sumiam do nada e eu não entendia o porquê. Aqui surgiu a maior dor de cabeça (que acho que vai gerar um tutorial), onde precisei configurar o Amazon S3 e fazer ele funcionar no Trix. Spoiler: precisou modificar o CORS e a política de acesso no Amazon, além de modificar o partial do blob nas views.

Dominando "só" isso, consegui trazer este blog à vida, e ainda o considero apenas um "MVP".

O meu simples painel administrativo.

E daqui pra frente?

De fato, não existe nada que te ensine mais do que colocar a mão na massa. Terminei esse blog percebendo o quanto ainda faltava para ter todas as soluções que eu queria, ao mesmo tempo em que já me arrependia de algumas decisões de arquitetura que tomei. Daqui pra frente pretendo focar em alguns pontos para evoluir este projeto:

Testes: apesar de já saber fazer testes unitários em código Ruby, ainda não sei como fazer isso em projetos Rails. Comecei a ler um livro muito bacana chamado 'Testing Rails' e vou devorá-lo para poder aplicar aqui. Percebi a importância quando precisei refatorar algumas partes e me vi tendo que testar as funções uma por uma, quando tudo poderia ter sido apenas uma rodada nos testes.

Segurança: preciso aprender a testar a segurança das aplicações. No caminho posso ter deixado alguma coisa para trás que deixe o site vulnerável. Se tiverem alguma sugestão quanto a isso, adoraria receber.

Categorias: as categorias já existem, mas não estão totalmente do jeito que eu quero. Preciso criar as views para elas e permitir que um post tenha mais de uma categoria.

Newsletter: atualmente faço a newsletter do Alimente o Cérebro (meu canal no YouTube) por um plugin do Wordpress + serviço de e-mail da Amazon. Quero aprender a fazer isso pelo Rails. Aceito sugestões também.

Analytics: não quero usar o Google Analytics, então já andei namorando o Ahoy.

Versão em inglês: aqui entra o motivo pelo qual vou permanecer com o Rails para um "simples blog". Quero fazer um sistema que permita que vocês me ajudem a escrever um inglês melhor, isso vai necessitar uma dose de criatividade e conhecimento no Hotwire, então é um plano a mais longo prazo.

Se tiverem alguma dúvida ou sugestão, fiquem a vontade para contribuir lá no LinkedIn, o local que escolhi para concentrar os comentários para as publicações do blog. E esperem muito Ruby e Rails por aqui =)

Receba atualizações por e-mail

Sempre que tiver novidades por aqui vou enviar aos inscritos.

Entre na conversa

Criei uma postagem lá no LinkedIn para receber comentários:

Comente