sábado, 12 de setembro de 2009

Erro ao rodar rake db:migrate

Se ao rodar o comando rake db:migrate você está tendo o seguinte erro:

rake aborted!
undefined method 'reenable' for [environment]>:Rake::Task

Pode estar tendo o mesmo problema que eu tive.

Quando estava montando um ambiente de desenvolvimento para Ruby on Rails em minha máquina, provavelmente dei uma noobada e instalei o rake com o apt-get ou ele entrou como dependência de alguma coisa e eu não parcebi.

Enfim, estava instalado no sistema como pacote Debian a versão 0.8.1 do rake e também como gem a versão 0.8.7

Para resolver isso, bastou desinstalar o rake do sistema com o comando:

sudo apt-get remove rake
Após ter feito isso, o rake rodou normalmente. Para testar rode:

rake --version
Se após isso ele indicar que o pacote não está instalado ou algo do tipo, dê uma olhada nesse post: Chamando aplicativos instalados com o ruby gem com um comando no terminal

[ ]'s

sexta-feira, 11 de setembro de 2009

Chamando aplicativos instalados com o ruby gem com um comando no terminal

Primeiramente um conselho: Tudo que puder instalar para desenvolvimento Ruby via ruby gem instale (melhor ainda se usar o rvm). Evite instalar qualquer coisa no sistema via apt-get. Isso pode gerar uma série de conflitos e, além disso, geralmente o repositório do synaptic demora um tempo para ser atualizado. Assim, instalando as gems você terá um sistema mais limpo e os frameworks/aplicativos mais atualizados, além da facilidade de manutenção.

Para que você possa chamar os aplicativos instalados via ruby gem (gem install "aplicativo"), você pode adicionar o path dos binários destes aplicativos rodando os seguinte comandos no terminal (neste caso utiliznado o ruby 1.8):

sudo su
echo "export PATH=\"\$PATH:/var/lib/gems/1.8/bin\"" >> /etc/bash.bashrc
exit

Isso fará com a linha export PATH="$PATH:/var/lib/gems/1.8/bin" seja adicionada ao aquivo /etc/bash.bashrc. Assim, toda vez que for iniciado o bash, sua variável ambiente $PATH receberá também o caminho dos binários instalados via ruby gem que ficam contidos na pasta /var/lib/gems/1.8/bin.

Contudo, na versão 9.10 do Ubuntu (se você utiliza outra versão, procure saber), o comando sudo foi compilado com a opção --with-secure-path. Assim, mudanças realizadas na variável não surtem efeito quando utilizado o comando sudo. Para contornar isso faça:

echo "alias sudo='sudo env PATH=\$PATH'" >> ~/.bashrc
Desta forma a variável $PATH será a mesma usando o comando sudo ou não.

Com isso, se eu instalar o rails assim:

sudo gem install rails
e poderei chamar o rails no terminal simplesmente rodando:

rails
As mudanças apenas surtirão efeito ao reiniciar seu terminal ou fazendo:

source /etc/bash.bashrc
source ~/.bashrc

[ ]'s