sexta-feira, 8 de julho de 2011

rake db:migrate - couldn't parse YAML

Colocando um projeto em Rails 3.1 em produção, tive um problema novo, que me custou uma meia hora para resolver:

 $ rake db:migrate RAILS_ENV=production
 rake aborted!
 couldn't parse YAML at line 20 column 16

 Tasks: TOP => db:migrate => environment
 (See full trace by running task with --trace)

Doideira! Nunca tinha visto isso. Numa busca mais ou menos rápida, encontrei este tópico no StackOverFlow, no qual a resposta do vicvega resolveu meu problema. Ele diz para adicionar duas linhas ao config/boot.rb:


 require 'yaml'
 YAML::ENGINE.yamler= 'syck'

Em desenvolvimento não percebi o problema. Então, fiz assim:


if ENV['RAILS_ENV'] == 'production'
  require 'yaml'
  YAML::ENGINE.yamler= 'syck'
end

E ficou perfeito. Mas há outras causas prováveis para o problema. 

As versões em uso:

 ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]
 Rails 3.1.0.rc4
 Rake 0.9.2

2 comentários:

  1. Grande post, me ajudou muito aqui em casa aonde estava tendo o mesmo problema em projeto. Só que aqui o erro aparece desde o modo em desenvolvimento.

    ResponderExcluir
  2. Pelo que percebi, no modo desenvolvimento acontece quando tem carácteres especiais no arquivo. Em Produção sempre deu nos testes por sempre ter caráteres especiais na senha. O chato, é que as vezes ocorreu até sem ter senha alguma. Acho que no meu caso foi mesmo a zona de transição entre versões do Rails e outras Gems.

    Que bom que resolveu para você também.

    ResponderExcluir