Curso de Rails

Nossos objetivos principais são:

  • Aprender Ruby e Rails
  • Montar um server Rails
  • Implementar ambientes de desenvolvimento e produção
  • Implementar o Continous Integration e Continous Delivery
  • Aprender tarefas de DEVOPS (mysql, linux, aws e ci/cd)

Usaremos a técnica de Aprendizado por demanda (mais informações aqui)

Objetivo prático - fazer um servidor de microserviços

Acho legal cada pessoa escolher o seu tema, mas como sugestão vou escolher fazer um microserviço que checa se um sistema qualquer está no ar ou não.

Aula 0 - Alicerce de conhecimentos

Para "aquecer os motores" vamos estabelecer dois objetivos menores e estudar uma listinha de materiais que nos dará um norte para o resto do curso. Os objetivos são:

1 - Entender o que é o Ruby e o Rails através de material online.

Abaixo tem uma listinha de links para os materiais que devemos ler.

https://rubyonrails.org/doctrine

https://guides.rubyonrails.org/getting_started.html

https://www.json.org/json-en.html

https://dicasdeprogramacao.com.br/o-que-e-json/

https://tudosobrehospedagemdesites.com.br/servidor-web/

https://www.luiztools.com.br/post/o-que-e-um-micro-servico-ou-microservice/

https://www.devmedia.com.br/introducao-a-web-services-restful/37387

https://www.csoonline.com/article/3634784/how-corporate-data-and-secrets-leak-from-github-repositories.html

Recomendo também instalar as seguintes ferramentas de desenvolvedor. Caso você já prefira alguma alternativa o passo é opcional.

Atom - editor de texto opesource - https://atom.io/
DBeaver - Interface para banco de dados Mysql - https://dbeaver.io/

2 - Definir o que vamos fazer até a aula seguinte, cada um vai definir o tema de criação de um microserviço da sua escolha.

Como comentei acima, o primeiro objetivo nosso com o rails será instalar o ambiente e depois desenvolver alguma coisa. O exemplo que escolhi será um microserviço que terá as seguintes caracteristicas:

  • Acessa um sistema que será monitorado de tempos em tempos para coletar o seu estado de funcionamento
  • Registra as consultas de estado em um banco de dados
  • Caso o estado do sistema monitorado seja ruim, o microserviço emite um SMS ou EMAIL
  • Pode receber uma chamada GET para consultar o estado de funcionamento de um determinado sistema e devolve esse estado através de um objeto JSON

Você pode optar por seguir esse exercício proposto ou bolar o seu próprio microserviço. Caso alguem queira fazer algo diferente podemos comentar na próxima aula. Os seguintes tópicos serão abordados, mas se alguém aparecer com uma idéia diferente vamos discutir:

  • Comunicação através de API RESTful
  • Armazenamento em banco de dados
  • Tarefas com excução automática via Timer, famoso "pooling"
  • Configuração via variáveis de ambiente e banco de dados

Achados para Próximas Aulas

https://www.bootrails.com/blog/rails-form-tutorial/ - Tutorial de formulário no Rails

https://getbootstrap.com/docs/4.0/components/forms/ - baita tutorial de formas no bootstrap

https://edgeapi.rubyonrails.org/classes/ActionController/Redirecting.html

https://damuz91.medium.com/setting-up-puma-as-a-service-in-systemd-in-ubuntu-18-9d2c1fe774e4 - Tutorial de como instalar o PUMA como serviço

Comandos Úteis para não esquecer

#Cria modelo com os campos definidos 
bin/rails generate model Article title:string body:text

rails generate controller Publicacoes index --skip-routes

#precompila
RAILS_ENV=production bin/rake assets:precompile

#cria chaves - deletar o credentials e o master.key antes
EDITOR="nano --wait" bin/rails credentials:edit

#instalar o mysql2 no apple M1
gem install mysql2 -v '0.5.3' -- \
--with-mysql-lib=$(brew --prefix mysql)/lib \
--with-mysql-dir=$(brew --prefix mysql) \
--with-mysql-config=$(brew --prefix mysql)/bin/mysql_config \
--with-mysql-include=$(brew --prefix mysql)/include 



    :binary
    :boolean
    :date
    :datetime
    :decimal
    :float
    :integer
    :primary_key
    :string
    :text
    :time
    :timestamp

Aula 01 - Git

Cadastrar a chave na sua estação local

nano ~/.ssh/config

Host github.com
        Hostname github.com
        IdentityFile ~/path/to/key.pem
        IdentitiesOnly yes

Aula 02 - MVC

https://www.devmedia.com.br/introducao-ao-padrao-mvc/29308 - Artigo sobre MVC