Sabe aquele bug que só acontece em produção? Aquela tela que renderiza um pouco diferente porque tem aqueles dados diferentes que só existem no banco de dados de prod? Ou aquele usuário maluco que causou todos aqueles corner cases porque o input dele era muito diferente? Todo mundo já passou por esses problemas! E por que essas coisas acontecem? Uma das respostas é fácil: faltaram dados. Depois de muita dor de cabeça brigando com rake db:seeds, db:migrations, muito SQL e de abrir muito rails console em produção que eu resolvi que era hora de resolver esse problema de uma maneira diferente. Foi aí que eu criei o Polo. Uma ruby gem que automatiza a criação de dumps do seu banco de dados em produção e gera amostras pra você poder importar no seu ambiente de desenvolvimento. Não perca mais tempo quebrando a cabeça com dados inconsistentes, fazendo deploys para produção só pra testar um corner case, ou abrindo console do rails em produção e brincando com a morte.
20. class Chef < ActiveRecord::Base
has_many :recipes
has_many :ingredients, through: :recipes
end
class Recipe < ActiveRecord::Base
has_many :recipes_ingredients
has_many :ingredients, through: :recipes_ingredients
end
class Ingredient < ActiveRecord::Base
end
class RecipesIngredient < ActiveRecord::Base
belongs_to :recipe
belongs_to :ingredient
end
20 / 39
29. asn = ActiveSupport::Notifications
# Extracted so this can fit in a slide
asn.subscribed(collector, 'sql.active_record') do
# Set up ActiveRecord::Preloader
base_finder = @base_class.
includes(@dependency_tree)
.where(id: @id)
# Store SELECTS in some global storage
collect_sql(@base_class, base_finder.to_sql)
end
29 / 39