Slide 1

Slide 1 text

O que não .gitignorar na sua app Rails

Slide 2

Slide 2 text

@ulissesalmeida Plataformatec

Slide 3

Slide 3 text

Consultoria Pessoas, projetos, contextos diferentes... Muita coisa boa, muitos debates.

Slide 4

Slide 4 text

.gitignore +config/secrets.yml +config/database.yml +db/structure.sql

Slide 5

Slide 5 text

config/secrets.yml

Slide 6

Slide 6 text

secrets.yml # Make sure the secrets in this file are kept private # if you're sharing your code publicly. development: secret_key_base: 1a1fd4fc0512b46ea449d07 test: secret_key_base: 1ffde16fcf1e55737cd8a60 # Do not keep production secrets in the repository, # instead read values from the environment. production: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

Slide 7

Slide 7 text

Make sure the secrets in this file are kept private if you're sharing your code publicly.

Slide 8

Slide 8 text

Complicações • Setup mais complexo • Difícil de controlar as variaveis • Workaround config/secrets.yml.sample

Slide 9

Slide 9 text

Recomendado # config/secrets.yml # Do not keep production secrets in the repository, # instead read values from the environment. production: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

Slide 10

Slide 10 text

Variáveis de ambiente Pode ser usado no database.yml e etc.

Slide 11

Slide 11 text

dotenv https://github.com/bkeepers/ dotenv

Slide 12

Slide 12 text

git-crypt https://github.com/AGWA/git- crypt

Slide 13

Slide 13 text

.gitignore -config/secrets.yml -config/database.yml db/structure.sql

Slide 14

Slide 14 text

db/structure.sql

Slide 15

Slide 15 text

structure.sql vs schema.rb

Slide 16

Slide 16 text

structure.sql • O git diff é difícil de revisar • Conflitos difíceis de resolver

Slide 17

Slide 17 text

Complicações • Você não tem a representação do banco de dados atual • Precisa sempre executar sempre todas migrations • O número de arquivos na pasta de migrations cresce muito rápido. • Isso é lento :(

Slide 18

Slide 18 text

Complicações • Precisa manter manualmente todas suas migrations • A pasta tende a ficar com muitos arquivos antigos • Migrations muito antigas tendem a quebrar ou não fazerem mais sentido • Remoção/Adição de tabelas, colunas e models por exemplo • O rake db:setup perde sua importância.

Slide 19

Slide 19 text

Na maioria dos casos • Sua aplicação em produção só precisa das migrations novas • Um database novo só precisa do rake db:setup

Slide 20

Slide 20 text

rake db:setup rake db:create # Cria o banco de dados rake db:structure:load # Carrega a estrutura do structure.sql rake db:seed # Carrega os dados

Slide 21

Slide 21 text

rake db:structure:load • Permite carregar a estrutura atual do banco de dados. • Não há necessidade executar todas migrations • Bem mais rápido!

Slide 22

Slide 22 text

Pode apagar migrations? Sim! (Mas faça com muito ❤ e atenção)

Slide 23

Slide 23 text

structure.sql • O git diff é difícil de revisar • ¯\_()_/¯ • Conflitos difíceis de resolver • Melhor ter esses conflitos em desenvolvimento do que em produção

Slide 24

Slide 24 text

.gitignore -config/secrets.yml -config/database.yml -db/structure.sql

Slide 25

Slide 25 text

Obrigado! @ulissesalmeida Plataformatec