Salvando SQL views no schema em aplicações Rails

on October 13, 2014 14:51

Se você usa views na sua aplicação Rails, seja porque ela é uma aplicação legada, ou elas são usadas para simplificar as consultas para relatórios, por exemplo, pode ter alguns problemas na hora de fazer o setup do projeto em uma máquina nova.

Eu não sabia (até hoje), mas o schema.rb não guarda as informações de criação das views, que você provavelmente fez em uma migration. Afinal, a não ser que tenha usado uma gem específica pra isso, você usou SQL puro para criar a migration.

Quando tive esse problema, pensei em fazer isso no db/seeds.rb, e mandar executar o SQL, mas não parecia uma solução muito elegante, afinal eu não estava criando dados de seed, mas criando estrutura. Daí eu encontrei a solução perfeita.

Para fazer a migration exportar as views, devemos mudar o formato dessa exportação para SQL. Você pode fazer isso no application.rb:

# config/application.rb
config.active_record.schema_format = :sql

ou, se você estiver numa aplicação Rack qualquer, pode colocar no seu Rakefile:

# Rakefile
ActiveRecord::Base.schema_format = :sql

Quando você executar a migration, gerará um arquivo structure.sql em vez do schema.rb.

Para carregar, em vez de rake db:schema:load, use:

# console
$ rake db:structure:load

E as views serão criadas.

Fonte: Using Rails and SQL Views for a Report

Comments

Migrando dados entre sistemas de bancos de dados com ActiveRecord

on September 22, 2014 12:13

Recentemente migrei este blog de MySQL para PostgreSQL.

Um dos problemas que tinha que resolver era migrar os posts existentes sem perder dados. Como os formatos de dump podem ser incompatíveis, resolvi usar o próprio ActiveRecord para me ajudar a migrar os dados.

Baixei um dump do MySQL, carreguei num BD local, e criei um banco novo no PostgreSQL.

Como eu refiz todo o código (a versão do Rails estava em 2.3.x :p), já configurei o database.yml para usar o adapter do PostgreSQL:

# config/database.yml
development:
  adapter: postgresql
  encoding: unicode
  database: blog_development
  pool: 5
  username: root
  password:
  socket: /var/pgsql_socket/.s.PGSQL.5432

Então o que eu tive que fazer foi configurar uma nova conexão para o banco legado em MySQL:

# config/database.yml
legacy_development:
  adapter: mysql2
  database: blog_development
  username: root
  password:
  port: 3306
  host: localhost

A partir daí criei um model temporário, usando a conexão MySQL:

# app/models/legacy_post.rb
class LegacyPost < ActiveRecord::Base
  establish_connection :legacy_development
  self.table_name = "posts"
end

Daí foi só entrar no console e rodar o script:

# console
LegacyPost.all.each do |legacy_post|
  Post.create(legacy_post.attributes)
end

A partir daí você pode apagar o model e editar a configuração do banco legado.

Comments

Organizando textos para leitura

on August 27, 2014 17:44

Faz anos que acabei a faculdade, mas nunca parei de estudar. No mundo de TI manter-se atualizado é obrigatório (a não ser que você queira fazer a mesma coisa pelo resto da sua vida – não recomendo). Foi assim que descobri Ruby, a ascensão do JavaScript e os inúmeros esquemas de deployment e virtualização que existem hoje.

As informações estão por todo lado na internet, mas vêm de muitos lugares diferentes, e nem sempre dá pra ler aquele artigo naquela hora que você o encontrou. Então como guardar este texto e salvá-lo para ler depois? Que ferramentas usar?

Há muitas opções por aí, muitas free, outras pagas. Depois de muito experimentar, acabei chegando num esquema que considero adequado. Lógico, as coisas podem mudar (RIP Google Reader), então é sempre bom estar atento a todas as ferramentas.

As ferramentas

Vou explicar detalhadamente como uso cada uma delas, mas segue aí a lista do que uso atualmente:

  • Pocket
  • Evernote
  • Feedly
  • Kindle (ou iPad mini)
  • IFTTT

Fontes de informação

Além do Feedly, onde assino os feeds que mais me interessam, as informações podem vir do Twitter (siga-me!), do Facebook ou mesmo de uma busca por algo específico no Google.

Para textos simples

Se é um texto simples, mando direto para o Pocket. Praticamente todas as fontes de informação têm suporte para envio para o Pocket (extensões para browsers cobrem o resto), então é algo realmente simples. Depois de lido posso arquivar ou enviar para o Evernote. Daí o próximo tópico.

Para arquivar

O Evernote é ótimo para manter um arquivo de absolutamente tudo. Eu faço backup das fotos do Instagram, checkins do Foursquare Swarm (via IFTTT – ver abaixo), tiro fotos de contas para pagar depois e principalmente arquivo tudo o que me é relevante para ter a informação sempre que eu precisar. Você pode organizar as notas em notebooks e tags. Especificamente, eu uso um notebook chamado ‘Bookmarks’, que posteriormente posso organizar por assunto que eu esteja estudando. As tags ajudam a (excelente) busca.

Leituras longas

Nada bate o Kindle e seu e-ink para leituras mais longas. Eu tenho um Kindle Paperwhite e adoro. Então se vejo que um texto é muito grande, já mando pro Kindle (via email ou extensão de browser) e também pro Evernote. Lógico que livros entram nessa categoria. Já livros em PDF, que talvez não fiquem bem no Kindle eu mando para o iBooks, daí eu leio no iPad mini. Também é possível mandar a partir do Pocket (ver abaixo).

Integrando com o IFTTT

O IFTTT (If This Then That) é uma excelente ferramenta para automatizar coisas. As receitas que utilizo para organizar meus textos:

  • From Pocket to Kindle – às vezes salvo um artigo no Pocket mas reparo que ele é meio longo, e seria melhor ler no Kindle. Sem problemas, aplico a tag ‘kindle’ no Pocket e ele envia para o meu email registrado no Kindle para receber textos
  • From Pocket to Evernote
  • Save favourite tweets to Evernote

E você? Como faz para organizar os seus textos para leitura? Descreva nos comentários.

PS: este post faz parte de uma iniciativa do @rafaelrosafu chamada #ClubeDosPosts de incentivar as pessoas a escreverem pelo menos um post por mês relacionado a TI. Se quiser participar, acesse a planilha e inclua seu twitter handle.

Comments

RailsConf 2011, here I go

on May 15, 2011 14:00

Primeiro post do ano, como o tempo passou. Não foi nem falta de tempo, mas falta do que escrever mesmo. Mas agora (hoje) parto para a "RailsConf 2011":http://railsconf.org em Baltimore, e espero ter muitas coisas para escrever depois de voltar.

Destaco algumas palestras que devo assistir:

  • From 1,000 Transactions a Month to 1 million in a Day: Lessons in Credit Card Processing from LivingSocial

  • Keeping Rails on the Tracks

  • Solving Performance Problems with Horizontal Scale. (The Worker Pattern)

  • Beyond MVC -- DCI

Antes da RailsConf, também participarei da Ignite RailsConf, com palestras de 5 minutos, 20 slides.

Depois da conferência, tiro alguns dias de férias para visitar Nova York, e realizar um de meus sonhos: assistir a um jogo no Yankee Stadium.

Agradeço à "Bio Ritmo":http://www.bioritmo.com.br por possibilitar essa experiência que será muito importante para minha vida e carreira.

Até a volta!

Comments