#README
Rails Production Setup é um tutorial que ensina a configurar um banco e simular um ambiente de produção localmente :)
Para rodar a aplicação é preciso ter o ruby 2.5.1 em sua máquina
Guia completo pode ser encontrado aqui RVM Page
Com o ruby instalado rode gem install bundler
para baixar o
instalador de pacotes ruby, e depois bundle install
para instalar
todas as dependencias de Gemfile
Primeiro precisamos configurar o banco, seja local (ambiente de desenvolvimento) ou um suposto banco de produção.
Para ambos os casos, precisamos de uma máquina que tenha um banco instalado
No meu caso, vou instalar o mysql como banco em uma máquina remota na amazon
Tenho um script automatizado pra fazer isso, entao eu so rodo esse comando no servidor que roda um Ubuntu 18.04 como SO
sudo curl https://raw.githubusercontent.com/pedrost/fast-mysql-setup/master/setup.sh | sudo bash
Esse script cria um usuario chamado web_service e dá permissões do banco á ele, ele também troca a senha do usuário root para secret123
Após o banco estar configurado no meu servidor, preciso abrir as portas de conexões
Vou abrir uma porta 80 HTTP para o phpmyadmin e outra porta TCP 3306 para o mysql
Também vou mudar as configuraçoes do mysql para aceitar conexões remotas e não apenas do localhost
No arquivo /etc/mysql/mysql.conf.d/mysqld.cnf troque o valor de bind-address para 0.0.0.0
Desse modo: bind-address = 0.0.0.0
Depois de ter configurado o banco, e aberto as portas para melhor gerenciamento
Vamos ao segundo passo
Nesse arquivo ficam as configurações do banco de dados, é preciso altera-las conforme estiverem
os seus respectivos bancos (teste, desenvolvimento e produção)
Muita atenção para o atributo adapter e encoding
Esses atributos são essenciais dependendo do banco que você queira
que a aplicação se conecte. No meu caso adaper: mysql2 e encoding: utf8mb4
também é preciso configurar user e password que foram criados em seu banco
No meu caso, vou preencher mysql_username: web_service e mysql_password: secret123 nas credentials como variaveis
de producao, rodando o comando EDITOR=nano bin/rails credentials:edit
Também vou preencher hostname com o IP do servidor remoto que eu configurei
Que no caso é 3.134.253.125, junto com o local do socket do mysql
Que no caso é socket: '/var/run/mysqld/mysqld.sock'
production:
production:
<<: *default
database: web_service_production
pool: 5
timeout: 5000
username: <%= Rails.application.credentials.dig(:production, :mysql_username) %>
password: <%= Rails.application.credentials.dig(:production, :mysql_password) %>
host: '3.134.253.125'
socket: '/var/run/mysqld/mysqld.sock'
Com o database.yml configurado e banco configurado é possivel
criar o banco em produção web_service_production rodando
rake db:create RAILS_ENV=production
Depois, migrar o banco em produção
rake db:migrate RAILS_ENV=production
Agora podemos iniciar nossa aplicação em produção rodando
RAILS_ENV=production rails s
Para instalar o nginx rode
sudo apt-get install nginx
Depois configure o arquivo default
sudo nano /etc/nginx/sites-available/default
Vou configurar dessa maneira para que meu localhost aponte para o socket do puma
upstream app {
# É preciso alterar para o caminho de onde voce baixou esse repositorio
server unix:/var/www/rails_production_setup_tutorial/shared/sockets/puma.sock fail_timeout=0;
}
server {
listen 80;
location / {
proxy_pass http://app;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}
client_max_body_size 4G;
keepalive_timeout 10;
}
Depois restarte o nginx
sudo service nginx reload
[Unit]
Description=Puma Rails Production Setup Tutorial
After=network.target
[Service]
Type=simple
WorkingDirectory=/var/www/rails_production_setup_tutorial
ExecStart=/home/rails_production_setup_tutorial/.rvm/gems/ruby-2.5.1/wrappers/puma -C /var/www/rails_production_setup_tutorial/config/puma.rb
Restart=always
[Install]
WantedBy=multi-user.target
sudo service rails_production_setup_tutorial start
Para checar o status
sudo service rails_production_setup_tutorial status
Para rodar os testes automatizados basta rodar rspec
Verb URI Pattern Controller#Action
GET /poll(.:format) polls#index
POST /poll(.:format) polls#create
GET /poll/:id(.:format) polls#show
GET /poll/:id/stats(.:format) polls#stats
POST /poll/:id/vote(.:format) polls#vote