Dica rápida: Como instalar o PostgreSQL no seu Mac OS e as gems para sua aplicação Rails
Olá pessoal !
A dica rápida de hoje visa diminuir a dor de cabeça e agilizar o processo de instalação e configuração do PostgreSQL para que funcione com o Rails em seu ambiente de desenvolvimento.
O primeiro passo, é baixar a versão do PostgreSQL para Mac OS(utilizei o .dmg por questão de praticidade) que pode ser encontrato em: http://www.enterprisedb.com/products-services-training/pgdownload#osx
Após a instalação do .dmg podemos criar uma nova aplicação, aqui usaremos exemplo_pg para exemplificar, então, abra o terminal e digite:
rails new exemplo_pg
Com nossa estrutura no esquema, devemos inserir no Gemfile do projeto a gem ruby-pg que é a responsável pela integração do rails com o postgre. Porém, se tentar executar o comando bundle install, você muito provavelmente obterá uma saída parecida com esta:
Fetching: ruby-pg-0.7.9.2008.01.28.gem (100%)
Building native extensions. This could take a while...
ERROR: Error installing ruby-pg:
ERROR: Failed to build gem native extension.
/Users/mauriciovoto/.rvm/rubies/ree-1.8.7-2011.03/bin/ruby extconf.rb
extconf.rb:1: command not found: pg_config --bindir
=========== WARNING ===========
You are building this extension on OS X without setting the
ARCHFLAGS environment variable, and PostgreSQL does not appear
to have been built as a universal binary. If you are seeing this
message, that means that the build will probably fail.
Try setting the environment variable ARCHFLAGS
to '-arch x86_64' before building.
For example:
(in bash) $ export ARCHFLAGS='-arch x86_64'
(in tcsh) % setenv ARCHFLAGS '-arch x86_64'
Then try building again.
===================================
extconf.rb:55: command not found: pg_config --includedir
extconf.rb:52: command not found: pg_config --libdir
checking for main() in -lpq... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/Users/mauriciovoto/.rvm/rubies/ree-1.8.7-2011.03/bin/ruby
--with-pgsql-dir
--without-pgsql-dir
--with-pgsql-include
--without-pgsql-include=${pgsql-dir}/include
--with-pgsql-lib
--without-pgsql-lib=${pgsql-dir}/lib
--with-pqlib
--without-pqlib
Could not find PostgreSQL build environment (libraries & headers): Makefile not created
Gem files will remain installed in /Users/mauriciovoto/.rvm/gems/ree-1.8.7-2011.03@gis/gems/ruby-pg-0.7.9.2008.01.28 for inspection.
Results logged to /Users/mauriciovoto/.rvm/gems/ree-1.8.7-2011.03@gis/gems/ruby-pg-0.7.9.2008.01.28/ext/gem_make.out
Para resolver este problema e instalar a gem normalmente, basta executar o seguinte comando:
PATH=$PATH:/Library/PostgreSQL/9.0/bin/ bundle install
E em seu database.yml:
development:
adapter: postgresql
database: sua_base
username: seu_user
password: sua_password
host: localhost
encoding: UTF8
Com isto, ao rodar os comandos rake db:create e db:migrate deverá obter sucesso !
Espero poder contribuir e evitar que muitos tenham os problemas e dificuldades que tive ao executar este procedimento que em tese, deveria ser bem simples. Fiz tentativas com algumas outras gems do postgre, porém sem êxito.
Obs: As versões utilizadas neste post foram:
- Mac OSX 10.6.8
- Rails 3.0.3
- PostgreSQL 9.0.4-1
Dica rápida: Como corrigir a quebra de layout da div com classe fieldWithErrors
Olá pessoal, depois de muito tempo sem postar nada, estou de volta com uma pequena porém interessante dica. Especialmente para você que não tem um designer para lhe ajudar ou que tem e não pode contar muito com ele, hehehe !
O problema:
Quando customizamos a aplicação, criamos nosso css, estilizamos tudo direitinho e depois de integrar o layout da aplicação e testarmos, nos debatemos com o seguinte problema: em nosso form, ao tentar gravar ou editar, o ActiveRecord identifica qual o erro de validação, em qual campo houve o problema. É incluído uma div com a classe fieldWithErrors para que este campo tenha um destaque, porém, se temos o layout com label e input na mesma linha, o div com a classe fieldWithErrors faz o input pular ir para a linha debaixo, quebrando assim o seu belo layout.
A solução:
Pesquisando um pouco no google, vi diversas soluções, onde o pessoal substituiu o div com o campo que continha o erro por um span e o problema então seria solucionado. Mas é claro que as coisas não funcionam de primeira, no meu caso, possuo um helper para exibição de mensagens de erros e lá possuo um método responsável por imprimir as mensagens, algumas pessoas utilizam os arquivos de configuração(environment.rb ou application.rb dependendo da versão de seu rails), mas não gosto muito dessa abordagem.
A solução seria apenas incluir:
ActionView::Base.field_error_proc = Proc.new { |html_tag, instance|”<span class=\”fieldWithErrors\”>#{html_tag}</span>” }
Mas Milk, você está utilizando Rails 3 agora esqueceu ? Como existe a questão de XSS Protection no Rails 3, devemos sempre chamar html_safe nos outputs e pronto, problema resolvido !
Espero que essa dica agilize a vida de vocês como agilizou a minha !
Dica rápida: problema com authlogic + rails 3
Mais uma da série de dicas rápidas, agora referente à um bug com o authlogic e rails 3.
Ao seguir o railscast do Ryan Bates sobre o Authlogic, porém utilizando o rails 3, ao tentar executar o login você irá se deparar com o seguinte erro:
undefined method `to_key' for #
Este erro quer dizer que o UserSession.new está sendo chamado sem passar username e password para ele, isso ocorre porque o esquema de rotas no rails 3 é diferente, causando assim dois problemas:
- Primeiro, Authlogic não consegue criar um hash com seu username/password e armazenar em :user_session, logo, params[...] não vai funcionar.
- Segundo, Authlogic não sabe qual método REST utilizar para a rotina de autenticação, logo vai falhar ao tentar executar o método create.
A solução que realmente funcionou para mim foi sobrescrever o método to_key no model UserSession(também devemos sobrescrever o persisted?) como a seguir:
def to_key
new_record? ? nil : [ self.send(self.class.primary_key) ]
end
def persisted?
false
end
Utilizei como referência para este post, o seguinte link: Authlogic and Rails 3 solution vale a pena dar uma conferida, lá o autor detalhou mais o erro e também postou outra possível solução(que não rolou aqui para mim).
Abraços e até a próxima !
Dica rápida 2: problema ao instalar a gem mysql
Pessoal, aproveitando o embalo de domingo das dicas rápidas, aqui vai mais uma. O cenário é o seguinte: rails 3 instalado e a necessidade(e preferência) de utilizar o banco de dados mysql; sistema operacional: Mac OS X 10.6.6.
Ao tentar executar bundle install com a gem mysql no Gemfile, ou ao tentar executar gem install, o erro retornado é o seguinte(resumo):
Building native extensions. This could take a while…
ERROR: Error installing mysql:
ERROR: Failed to build gem native extension.
Erro detalhado: http://pastie.org/1535589
Com a ajuda de nosso amigo de sempre, o Google e também com as dicas da mensagem de erro também cheguei à conclusão de que a causa do erro foi o fato de a instalação do mysql estar em um local que não foi encontrado ao tentar instalar a gem, logo, a solução foi rodar o comando com uma das opções e obtive sucesso rodando da seguinte maneira:
gem install mysql — –with-mysql-config=/usr/local/mysql/bin/mysql_config
Espero que este post ajude outras pessoas além de me ajudar futuramente quando me deparar com este problema, hehe !
Dica Rápida: Verificar se a gem é compatível ao Rails 3
Hoje é dia de dica rápida, ou seja, algo bem útil mas que não necessita de grandes explicações, ou um post extenso.
A dica rápida de hoje serve para aqueles que como eu estão se aventurando na versão mais atualizada do rails e querem saber se a gem a ser utilizada no projeto é compatível com o rails 3. Aliás, esta dica serve para testar também a compatibilidade com jruby e ruby 1.9.
Basta entrar no site railsplugin e procurar pela gem que deseja utilizar, simples assim !
Até a próxima !
Rails Templates
Estou feliz por voltar a escrever no blog e este é o primeiro post de 2011, falando nisso, feliz 2011 atrasado para todos !
E hoje o assunto a ser tratado é algo que agiliza bastante a rotina de um railer criar novos projetos com o ambiente que prefere. Bom, eu sou um pouco suspeito para falar disto pois sou da escola do Java, onde costumamos perder bastante tempo configurando, isso pelo menos até conhecer o maven e seu famoso arquivo pom.xml, mas mesmo assim sempre tinha algo que dava algum problema e o tempo gasto em configurar um ambiente e um projeto novo era alto demais. Graças a Deus, com o Rails não temos esse problema porque podemos ter um template com gems a serem instaladas, arquivos a serem copiados e configurações a serem feitas.
Eu não poderia escrever este post sem antes citar o Daniel Lopes que é instrutor da e-Genial e ministrou cursos de rails que pude participar em meados de 2010. Em um destes cursos o Daniel citou sobre templates e para darmos uma conferida em seu github. Depois de muito tempo após o curso acabei olhando somente agora este conteúdo e gostei muito, comecei a utilizá-lo em minha rotina e estou aprovando. Se tiverem tempo, dêem uma olhada em meu github, a aplicação que clonei e personalizei, a my_template.
O seu uso é bem simples, se quiser personalizar, basta clonar o projeto e alterar o arquivo template.rb da maneira que quiser, poderá também alterar os arquivos que deseja incluir em seus futuros projetos. Se preferir utilizar direto do github, pode usar:
rails new app -m github.com/danielvlopes/base_app/raw/master/template.rb
ou:
rails new app -m github.com/mvoto/my_template/raw/master/template.rb
Para resumir, templates facilitam seu trabalho na hora de criar um novo projeto rails, você não perde tempo instalando gems, nem jogando javascripts, imagens, css e arquivos de layout que costuma jogar em alguns projetos com seus padrões. Recomendo fortemente !
Retrospectiva de Sprint para o final de ano
Como todos sabem, final de ano é correria para todo mundo e acaba não sobrando tempo para muita coisa. Eu por exemplo, queria preparar um post técnico bem legal para fechar o ano bem, mas infelizmente vai ficar para o começo de 2011. Para este post, farei uma analogia entre a reunião de retrospectiva do sprint, da metodologia scrum e uma análise de como foi sua carreira profissional neste ano.
Bom, para aqueles que já conhecem ou trabalharam com o Scrum já sabem como a reunião de retrospectiva funciona, mas para os que ainda não conhecem, sugiro que leiam o resumo feito pelo pessoal da IMPROVE IT: http://improveit.com.br/scrum, pois usarei alguns termos utilizados na metodologia.
A idéia de escrever este post, surgiu de um estalo que tive e achei bem interessante: por que não comparar nosso ano com um sprint ? E melhor ainda, por que não analisar nosso ano, ver o que houve de ruim para tentar melhorar e o que teve de bom para se aproveitar como em uma retrospectiva de sprint ?
Então, mãos à massa, post its de pontos negativos na parede e vamos lá: analisem os aspectos negativos do seu ano profissional, aquele projeto que não foi entregue no prazo(o que melhorar para mudar, o que fazer para conseguir alcançar o prazo, por que atrasou o projeto), aquele estudo que teve que ser deixado de lado, aquelas horas extras que foram apenas um favor e não remuneradas, aquele freela que você deixou passar.
Agora os post its com pontos positivos: aquela promoção que você conseguiu, aquela metodologia que você conseguiu colocar em prática e obteve bons resultados, aquela tecnologia nova que você aprendeu, aquele projeto pessoal que você concluiu, a conversa produtiva que você teve com seu chefe/equipe.
Beleza, mas pra que tudo isso ?
Ué, após preencher e colocar todos os post its nos quadros de pontos positivos e negativos, é hora de discutir cada um e analisar, com você mesmo, perca um tempo tentando entender algumas coisas e melhorando sua auto-estima para aqueles pontos positivos. Com isto, acredito que você terá uma boa leitura de como foi seu ano, poderá traçar estratégias melhores para alcançar seus objetivos para o próximo ano e por que não, traçar novas metas para 2011 ?
Espero ter contribuído em alguma coisa para você que está lendo este post. Um feliz natal e um 2011 abençoado, cheio de sucesso e realizações !
Html Reader, o experimento !
Iae galera, vou aproveitar minha insônia e escrever mais um post, desta vez sobre ruby.
A bola da vez é uma aplicação que desenvolvi esses dias(https://github.com/mauriciovoto/html_reader) que surgiu com a necessidade de minha noiva estar um pouco revoltada de pedirem em seu trabalho para fazer um exaustivo trabalho de ctrl C + ctrl V. Ela tinha que copiar informações de todos os Procon do estado de SP. Daí que me surgiu a ideia de desenvolver algo para ajuda-la.
Esta foi uma ótima oportunidade para botar em prática algumas coisas que havia e venho estudando, algumas delas, recomendo fortemente, como o jeweler, o rspec(quem acompanha o blog e meu twitter sabe que venho estudando bastante esta ferramenta), o infinity_test e outras gems como hpricot, rest-open-uri e spreadsheet. Além de ser outro laboratório de git pois tenho o péssimo costume de desenvolver aplicações e mante-las em minha máquina.
Bom, para resumir o que utilizei, o jeweler é uma ferramenta para geração de gems, ou seja, gera um projeto ruby com uma mínima estrutura para iniciar um desenvolvimento ideal.
O rspec como já citei antes no blog, é uma ferramenta para escrever testes como especificações.
O infinity_test é uma biblioteca que permite ao desenvolvedor ver em tempo real se seus testes estão passando ou não, um autotester que a cada alteração que é feita, roda os testes em background e notifica(em conjunto com outra ferramenta, como o growl para mac os).
O hpricot e o rest-open-uri são gems que permitem a leitura do html dos sites, sugiro a leitura das documentações para quem quiser estudar, apliquei apenas o básico em minha aplicação.
Por último, o spreadsheet é uma gem para manipulação de planilhas excel, apesar da pouca documentação não tem muito segredo de uso. Também utilizei em minha aplicação o básico de geração, nada diferente do que encontramos na página da gem.
Espero que possam dar uma conferida na app: html_reader críticas e sugestões são sempre bem-vindas ! E mais uma vez agradeço ao meu digníssimo camarada @raulsouzalima pois ele me indicou várias dessas gems e também agradecer ao @danielvlopes que apresentou brevemente o jeweler em uma de suas aulas que tive o prazer de assistir.
Como convencer de que é bom testar ?
Pessoal, estou estudando aqui bastante sobre BDD, TDD e algumas ferramentas para aplicar essas técnicas de uma vez por todas em minhas aplicações Rails, portanto ainda não tenho material nem conhecimento suficiente para postar sobre este assunto aqui no blog. Ao invés disso, vou escrever sobre algo que me intriga um pouco: o que meu chefe pensa à respeito disso ?
Bom, como disse, tenho estudado para aprimorar técnicas de desenvolvimento e em um breve futuro entregar aplicações com muito mais qualidade. Isso é uma coisa que me empolga, me motiva muito à ponto de eu conversar com meu atual chefe sobre o uso em um sistema que migraremos de uma linguagem de 3 letras(que não é PHP) para Ruby on Rails e aparentemente ele não se empolga tanto. Sua motivação aparece quando falo de melhorias na estrutura, performance e usabilidade.
Claro que na cabeça de um empreendedor em busca de lucros ele não quer saber de processo mas sim de resultados e isso no meu ponto de vista é um pouco preocupante. Alguém pode me responder como obter qualidade no produto final se não tem qualidade no processo atual ? E se o próximo desenvolvedor a ser contratado não conseguir dar manutenção no sistema de tanta gambiarra que foi feita ? E se o próximo desenvolvedor criar a nova funcionalidade, mas quebrar uma outra antiga e isso acontecer quando o diretor do seu cliente estiver navegando no sistema ?
Estas são algumas perguntas a serem feitas para quem não é a favor do uso de testes, por exemplo e de uma possível demora no início da implantação destes em sua empresa. Acredito que essa cultura deva ser estabelecida em uma empresa para que todos vistam essa camisa e não a tirem nos momentos de incêndio como já vi acontecer em trabalhos anteriores.
Quando você passa por um projeto legado que está mal feito, cheio de bugs e problemas de estrutura, fica muito mais fácil de evidenciar e mostrar para quem for que você pode fazer algo melhor, mais organizado e com uma garantia de qualidade que são os testes. Sem contar que se conseguir fazer uma demonstração de BDD na prática com o Cucumber por exemplo, qualquer pessoa que veja a documentação(features e steps) consegue saber o que o sistema faz !
Estou na minha luta para tornar os testes que só vem para somar uma realidade. Espero que você leitor, que já utiliza esta prática, encoraje os que ainda não o fazem e você leitor que não escreve testes ainda, que procure estudar e ir atrás pois realmente vale muito a pena !
Um bom ponto de partida para quem quer começar a aprender são os railscasts do Ryan Bates que falam sobre cucumber, rspec e webrat.
Algumas outras referências:
Blog do Chelimsky (pai do RSpec)
Simples Ideias – Usando o RSpec para testar sua aplicação Rails
Screencast do Anderson Leite da Caelum – Introdução à Cucumber e RSpec
rvm – o mágico gerenciamento de versões do ruby
Salve salve rubistas, railers e demais developers !
O assunto de hoje, pelo menos para mim é o fantástico rvm. Como essa ferramenta é útil na vida de um desenvolvedor !
Se você deseja ter em sua máquina JRuby, Rails 3, Rails 2.3.8, Ruby 1.9.2, Ruby 1.8.7 e o melhor, de forma organizada, você tem que instalar urgentemente o rvm.
Esta ferramenta além de gerenciar as versões do ruby, também permite gerenciar as gems com o uso de gemsets que podemos chamar de “repositório” de gems para ilustrar melhor o que é, portanto, pode-se tem em sua máquina todas as versões do rails por exemplo.
Alguns comandos simples e básicos do rvm, após ter instalado:
- rvm list (lista todas as versões do ruby que você tem, incluindo jruby)
- rvm install 1.9.2 (instala a versão do ruby de seu desejo)
- rvm use 1.9.2 (para utilizar tal versão desejada)
- rvm system (volta para a versão setada como padrão no sistema)
- rvm gemset list (lista todos os “repositórios de gems disponíveis para seu ambiente atual)
- rvm gemset create rails303 (cria um “repositório” de gems)
- rvm gemset use rails303 (para utilizar o “repositório” desejado)
- para instalar as gems apenas o comum: gem install rails
Termino este post recomendando fortemente os railers a utilizarem o rvm, acho que é uma ferramenta essencial e requisito para um bom desenvolvedor RoR.
Fonte para os comandos básicos/estudo:
http://rvm.beginrescueend.com
Ah, não posso esquecer de dar créditos ao parceiro @raulsouzalima que me indicou o uso urgente da ferramenta !