Web Development

Hard Programmming

Montando Um Ambiente De Desenvolvimento Completo De Ruby on Rails No Macosx Lion

| Comments

Olá a todos! Este é meu primeiro post na vida em um blog, e diferente de algumas pessoas que tem um gosto pessoal de fazer apresentações, eu dispenso. Não porque sou fodão, nada disso! O bom é ir logo ao que interessa, que é um post interessante bem técnico. Nesse primeiro post mostrarei como montar um ambiente de desenvolvimento em ruby e ruby on rails no mac os x lion. Dependendo da versão, ele poderá lhe causar alguns problemas. Aqui eu faço algumas desmistificações sobre os processos de instalação. Então, vamos lá!

Softwares Utilizados:

  1. Mac os X Lion 10.7.2
  2. Xcode.app
  3. MacPorts
  4. osx-gcc-installer
  5. RVM: Ruby Version Manager
  6. MySQL
  7. TextMate Version 1.5.10 (r1623)
  8. MacVim
  9. Ruby on Rails

Passo 1 - Instalando o Xcode

Estou supondo que você já fez a instalação do lion 10.7.2 e o sistema está “0km”. Caso você seja como eu, pobre, e utiliza hardware comum em seu computador pessoal, é possível rodar o lion em máquinas comuns (mas dependendo do seu hardware pode chegar a ser um processo bem complexo ou quase impossível). Mais informações sobre esse assunto, você poderá achar no fórum do pessoal do HBMT (fórum brasileiro sobre hackintosh, não teria conseguido aprender tanto sem eles), lá contém tutoriais bem completos e explicativos sobre esse processo. Voltando aqui pro nosso mundo, a primeira coisa que é preciso fazer é instalar o Xcode.

Utilizando o xcode

Até aí não tem muito segredo, é igual a instalação do ruindows. É só executar o xcode.app e #next. O ruim é que ás vezes por motivos que desconheço, ele dá uns erros, mas se acontecer com você, não se preocupe, mesmo assim tudo funciona.

Passo 2 - Instalando o ports

Para um maior conforto de dependências, sugiro aqui você utilizar o ports (sistema de fácil instalação e compilação de programas). Instale o arquivo .dmg disponível e depois vá ao terminal e digite:

1
sudo port selfupdate # isso atualizará a lista de programas do ports

Agora rode o seguinte comando:

1
2
sudo port install libtool wget readline ctags imagemagick zlib libyaml zlib1g openssl
automake sqlite3 curl git-core bison flex gettext

Esse comando instalará algumas ferramentas bem úteis (wget pra fazer downloads via terminal, imagemagick é usado pelo paperclip para conversão e modificações de imagens jpg,png,gif,tiff,etc).

Uma excelente ferramenta também é o brew, faz exatamente o mesmo trabalho do ports. Utilizo o ports por mera questão pessoal. Muitos desenvolvedores preferem o brew, outros muitos preferem o ports. Fica ao seu critério a escolha. Sugiro ler mais sobre as duas ferramentas e com a qual você resolve melhor os seus problemas.

Passo 3 - Instalando e utilizando o rvm

Beleza, agora vamos instalar o RVM. rvm é um gerenciador de versões de ruby. Com isso, é possível que você tenha várias versões do ruby instaladas em sua máquina e podendo alterar as versões através de comandos bem simples. Outra razão muito boa pra você utilizar rvm, é os gemsets. Gemsets organizam as suas gems no sistema. Você pode ter vários gemsets dentro de uma mesma versão do ruby (ruby 1.9.2 com rails2, rails3, rails3.1). No link oficial, você terá informações bem mais detalhadas.

Vamos instalar a versão estável do rvm através do comando:

1
bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )

Isso instalará o rvm em uma pasta oculta da sua pasta de arquivos, no meu caso: /Users/NOME_USUARIO/.rvm. Caso você seja um administrador de sistemas, poderá fazer uma multi-instalação (instalação para todos os usuários do sistema), é apenas colocar o sudo na frente e digitar o comando:

1
sudo bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer ) #(você vai precisar de senha de administrador para funcionar, chamamos esta forma de 'multi user')

Caso você tenha instalado via ‘single user’, precisará adicionar a seguinte linha em seu .bash_profile ou .bashrc:

1
2
.bash_profile => echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile
.bashrc => echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bashrc

Após isso, digite:

1
2
source .bash_profile (para .bash_profile)
source .bashrc (para .bashrc)

Ele carregará suas configurações novamente sem precisar fechar o terminal. Ou feche e abra novamente se assim preferir.. =p

Basicamente é só isso. Uma dica que eu faço em minha máquina é instalar em modo multi user, mas vivo tendo problemas na hora de instalar uma gem. Quem compartilha dessa doidice comigo, a solução é simples. Somente colocar o diretório rvm como do seu usuário. Digite no seu terminal:

1
sudo chown -R NOME_USUARIO:GRUPO /usr/local/rvm/

Isso é meio que desnecessário, mas é que eu acho que lugar de arquivos de sistema e programas é em /usr, /etc e não em pasta de usuário (pasta de usuário é apenas configuração deles mesmo). É mania de organização excessiva.

Para testar se a instalação funcionou, utilize o comando:

1
type rvm | head -1

Se retornar a mensagem “rvm is a function”, tudo está funcionando.

Continuando … agora vamos listar quais versões o rvm utiliza com o comando

1
rvm list known

Aparecerá uma lista de vários interpretadores ruby. Vamos escolher por hora a mais atual. Instale com esse comando:

1
rvm get latest

Você terá um problema assim que começar a compilar. É que por padrão, o gcc escolhido é uma versão da própria apple, que o ruby não aceita. Algo desse tipo:

checking target system type... i386-apple-darwin11.2.0
checking whether the C compiler works... no
configure: error: in `/Users/ricardopacheco/.rvm/src/ruby-1.9.3-p0':
configure: error: C compiler cannot create executables

Você poderá fazer esse teste utilizando o seguinte comando:

1
2
$ ls -la /usr/bin/gcc
lrwxr-xr-x  1 ricardopacheco  wheel  12 Jan  8 16:23 /usr/bin/gcc -> llvm-gcc-4.2

3.1 - osx-gcc-installer

O gcc por padrão executado no lion é um alias para llvm-gcc-4.2. O que eu li sobre ele, é que ele um gcc modificado pela Apple para utilização nos seus produtos. Todo software livre que precisei compilar com ele deu problema. Com o ruby não foi diferente. Mas relaxe,existe um compilador GCC para mac disponível, ele se chama osx-gcc-installer, com ele, você irá instalar o gcc-4.2 da GNU. Feito isso, é muito simples: coloque em seu arquivo /Users/NOME_USUSARIO/.rvmrc (single user) ou /etc/rvmrc (multi user) o seguinte comando:

1
export CC=/usr/bin/gcc-4.2

Pronto. Agora o rvm chama o gcc da GNU. Os problemas de compilação se resolvem por aí quando se tratar do rvm. Assim você conserva o Xcode e tem o compilador original GCC para mac disponíveis para uso. Algumas soluções exigem remover o xcode e fazer muitas “gambetas”, fazendo isso é o suficiente para que utilize os dois.

Tente novamente rodar rvm get latest e depois do processo pronto e tudo funcionará, agora é só digitar:

1
2
3
ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.2.0] # caso tenha usado 'rvm install 1.9.2'
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.2.0] # caso tenha usado 'rvm install 1.9.3'

Se aparecer “ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]”, ele está utilizando ainda a versão que vem no próprio lion. Mude as versões através de:

1
2
rvm use 1.9.2 # caso tenha instalado o ruby 1.9.2
rvm use 1.9.3 # caso tenha instalado o ruby 1.9.3

Pronto. Temos aqui rubys pronto pra funcionar. Vamos supor que queremos que uma dessas fique sempre default:

1
rvm use 1.9.3 --default

Agora sempre que entrar, 1.9.3 será o interpretador chamado por padrão.

Passo 4 - Instalando um Banco de Dados

Utilizo por padrão em muitos dos meus projetos o mysql. A instalação no mac pode ser feitas por 2 métodos: dmg e ports.

Por dmg, o processo é bem simples. Baixe essa versão do mysql em softwares necessário, monte a dmg e instale os arquivos nessa ordem:

1
2
3
mysql-5.5.19-osx10.6-x86_64.pkg. # O banco de dados propriamente dito
MySQLStartupItem.pkg. # Contém o script para o banco inicializar junto com o sistema
MySQL.prefPane # Adiciona um controlador do mysql em System Preferences

Para utilizar os comandos mysql e mysqladmin no terminal, adicione essas 2 linhas ao seu .bash_profile:

1
2
alias mysql=/usr/local/mysql/bin/mysql
alias mysqladmin=/usr/local/mysql/bin/mysqladmin

Reinicie o terminal e já poderá utilizado. Veremos que ele dará um pequeno problema no rails, mas tenha calma.

Por ports e brew o comando é simples:

1
2
brew install mysql # brew
sudo port install mysql5 mysql5-server # ports

Mas é preciso algumas configurações adicionais para tudo funcionar a contento. google ajudará vocês!

Passo 5 - TextMate e Vim

5.1 - TextMate

Para fãs deste fantástico editor, vai uma boa dica. Depois de comprá-lo(ou baixa-lo nos torrents kkk) e instalá-los, você poderá colocar customizá-lo ainda mais. Colocarei quais bundles eu utilizo mais:

O processo instalar uma bundle via git é simples:

mkdir -p ~/Library/Application\ Support/TextMate/Bundles # cria a pasta de bundles
cd ~/Library/Application\ Support/TextMate/Bundles # navega até a página
git clone git://github.com/pastadoprojeto "NOME DO BUNDLE.tmbundle" # clona o projeto do bundle do autor
osascript -e 'tell app "TextMate" to reload bundles' # recarrega bundles

Para instalar os bundles, vá até o diretório e execute:

1
2
3
4
5
6
7
cd ~/Library/Application\ Support/TextMate/Bundles
git clone git://github.com/drnic/ruby-on-rails-tmbundle.git "Ruby on Rails.tmbundle" # Ruby on Rails
git clone git://github.com/rspec/rspec-tmbundle.git RSpec.tmbundle # Para quem usa RSpec
git clone git://github.com/bmabey/cucumber-tmbundle.git Cucumber.tmbundle # Para quem usa Cucumber
git clone git://github.com/kswedberg/jquery-tmbundle.git "JavaScript-jQuery.tmbundle" # jQuery
git clone git://github.com/johnmuhl/html5.tmbundle.git "Html5.tmbundle" # Html5, para alguns é opcional
git clone git://github.com/jashkenas/coffee-script-tmbundle CoffeeScriptBundle.tmbundle #CoffeeScript, quase nem uso, mas deixo no ponto

E para quem programa em python e adora o django (que é o meu caso), poderá utilizar:

1
2
git clone https://github.com/textmate/python-django.tmbundle.git "Python-Django.tmbundle" # Sintaxe framework
git clone https://github.com/textmate/python-django-templates.tmbundle.git "Python-Django-Templates.tmbundle" # Templates Django

Basicamente, é isso.

5.2 - Vim

Vim é um super editor, e o que eu utilizo no linux (rodo mac e linux em minha máquina). Para instalar o vim, é somente baixar essa versão e colocar o MacVim.app em /Applications. Em tese, é só isso. Aqui vai uma dica interessante:

O vim do terminal já vem embutido no MacVim. Para utilizá-lo, basta adicionar essa linha ao seu .bash_profile

1
alias vim="/Applications/MacVim.app/Contents/MacOS/Vim"

Pronto. Para customizá-lo ainda mais com sintaxes e bundles, utilizo a configuração que o Fábio Akita disponibiliza em seu github, mas tive um problema quando fui rodar:

$ git submodule update init

Cloning into bundle/Command-T...
remote: Counting objects: 2308, done.
remote: Compressing objects: 100% (930/930), done.
remote: Total 2308 (delta 1246), reused 2231 (delta 1173)
Receiving objects: 100% (2308/2308), 376.21 KiB | 140 KiB/s, done.
Resolving deltas: 100% (1246/1246), done.
fatal: reference is not a tree: 5ac7bda
Unable to checkout '5ac7bda6c8677639155bd9a267aa1a20cd4e7881' in submodule path 'bundle/Command-T'

Esse problema foi discutido aqui, mas a solução proposta não funcionou comigo. Então encontrei esse repositório do shamanime, que é uma cópia fiel do repo do akita, mas que não ocorre esse problema em especial. Para deixar o vim no grau, realize os seguintes passos:

No seu diretório pessoal (/Users/seudiretorio/) ou digite (cd ~):

1
2
3
4
5
6
cd ~
git clone git://github.com/shamanime/vimfiles.git .vim
cd .vim
git submodule init
git submodule update
ln -s ~/.vim/vimrc ~/.vimrc

Caso o plugin Command-T não funcionar, tente fazer o seguinte procecimento:

1
2
3
cd ~/.vim/bundle/Command-T/ruby/command-t
ruby extconf.rb
make

Pronto. Temos um vim muito completo e bem funcional.

6 - Ruby on Rails

O mais difícil de todos. Agora que temos o ruby funcionando, é hora de falar dos gemsets. Você que pretender ser um bom desenvolvedor em ruby on rails e quer entender como esse universo funciona, terá que fazer basicamente duas coisas: programar e testar. Muito código e muito teste. “Sim, eu já sei disso”. Ótimo. Então sabe que algumas vezes gems causam conflitos, e você já usa rails 3 mas está dando suporte a um projeto feito em rails 2.3. Não é uma boa idéia deixar as gems tudo misturadas a uma única instalação. Utilize gemsets. Assim para cada versão você tem um gemset dedicado só a ele, ainda existe risco sim de conflito, mas é extremamente minimizado. Postarei alguns links nas referências e você poderá melhor entender como funciona.

SUPONDO que você já configurou o seu gemset, instalar o rails requer apenas 2 passos:

1
2
3
gem update --system (isso atualizará o rubygems)
gem install rails (instalará a última versão estável do ruby on rails)
gem install rails -v VERSION (version é a versão que vc deseja utilizar, 3.1, 3.0, 2.3). Aqui vc específica qual versão deseja.

Para testar o rails, digite no terminal:

1
2
$ rails -v
Rails 3.1.3

No meu caso, tenho a versão 3.1.3. Se retornar a versão, o rails está funcionando.

6.2 - Rails e Mysql

Para rodar o mysql em apps rails, é preciso utilizar a gem mysql2, mas quando você tem um projeto com mysql, geralmente acontece um problema muito comum que é esse:

Reason: image not found - /path/to/bundle

Isso sempre acontece comigo, no caso se você utiliza essa mesma versão que eu do mysql, é só digitar o seguinte comando:

1
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/rvm/gems/ruby-1.9.3-p0\@rails313/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle

Atenção ao “ruby-1.9.3-p0\@rails313”, essa é a versão que instalei do ruby mais o gemset que criei. Substitua no seu caso como necessário (vá até /usr/local/rvm/gems e utilize tab para autocompletar se não sabe exatamente o diretório)

7 - Conclusão e Referência

Bem, este é o meu primeiro post e espero que gostem. Sou uma pessoa que tem um estilo perfeccionista, tentei exemplificar o maior número de passos possível para um ambiente do mais completo possível. Caso tenham sugestões, críticas, ou correções, ficarei feliz se compartilhar comigo as experiências, assim eu posso editar o mesmo texto e melhorá-lo.

Referências Bibliográficas:

http://stackoverflow.com/questions/4546698/library-not-loaded-libmysqlclient-16-dylib-error-when-trying-to-run-rails-serv

https://code.djangoproject.com/wiki/TextMate

http://www.macports.org/install.php

http://beginrescueend.com/rvm/install/

http://beginrescueend.com/gemsets/

http://thinkvitamin.com/code/ruby-on-rails/installing-ruby-rails-and-mysql-on-os-x-lion/

http://www.frederico-araujo.com/2011/07/30/installing-rails-on-os-x-lion-with-homebrew-rvm-and-mysql/