ruby on rails 3 - error de rieles, no se pudo analizar YAML
ruby-on-rails-3 redcloth (29)
Aunque la respuesta dada por @Vicvega puede o no funcionar (No la probó) va en contra del principio común de Rails y Ruby "Convención sobre configuración" y debe tratarse con cuidado (y aún más en el trabajo colaborativo) ,,, incluso aunque la "configuración" en este caso no es muy buena
así que mi voto va (si pudiera votar) para aquellos que propusieron eliminar los errores de sintaxis en los archivos de YAML.
ahora ... para resolver el error, para mí era un nuevo error, no tenía el archivo de configuración regional que había definido como predeterminado en Config/application.rb
en mi directorio Config/locales
feliz codificación
Después de actualizar las gemas, tengo esto:
/home/megas/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/psych.rb:148:in `parse'': couldn''t parse YAML at line 182 column 9 (Psych::SyntaxError)
from /home/megas/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/psych.rb:148:in `parse_stream''
from /home/megas/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/psych.rb:119:in `parse''
from /home/megas/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/psych.rb:106:in `load''
from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/RedCloth-4.2.3/lib/redcloth/formatters/latex.rb:6:in `<module:LATEX>''
from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/RedCloth-4.2.3/lib/redcloth/formatters/latex.rb:3:in `<top (required)>''
from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/RedCloth-4.2.3/lib/redcloth.rb:21:in `require''
from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/RedCloth-4.2.3/lib/redcloth.rb:21:in `<top (required)>''
from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/RedCloth-4.2.3/lib/case_sensitive_require/RedCloth.rb:6:in `require''
from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/RedCloth-4.2.3/lib/case_sensitive_require/RedCloth.rb:6:in `<top (required)>''
from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/bundler-1.0.10/lib/bundler/runtime.rb:68:in `require''
from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/bundler-1.0.10/lib/bundler/runtime.rb:68:in `block (2 levels) in require''
from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `each''
from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `block in require''
from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `each''
from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `require''
from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/bundler-1.0.10/lib/bundler.rb:120:in `require''
from /home/megas/Work/railscasts/config/application.rb:10:in `<top (required)>''
from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/commands.rb:28:in `require''
from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/commands.rb:28:in `block in <top (required)>''
from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/commands.rb:27:in `tap''
from /home/megas/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/commands.rb:27:in `<top (required)>''
from script/rails:6:in `require''
from script/rails:6:in `<main>''
ruby-1.9.2-p136 rieles 3.0.3
Intentó volver a instalar la gema RedCloth, no ayudó, el sistema solo quiere usar la versión 4.2.3
¿Alguna de idea de cómo arreglarlo? Gracias
Bueno, solo en caso de que esto ayude ...
Lo que hice:
- Seleccione todo y copie de https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale/es.yml en un nuevo es.yml con notepad ++
- intenté ver este nuevo archivo con el editor de texto IDE de netBeans, recibí una advertencia sobre la carga segura con utf8 (no recuerdo el texto exacto). Por lo tanto, no se abrió con este editor de texto.
- cambió la configuración de thru local / application.rb i18n
- Cuando cargué una página IRB obtuve "No se pudo analizar YAML en la línea 0 columna 0" refiriéndose a Psych.
- Fui a IRB y cargué el archivo con syck, estaba bien; Cambió a psych y obtuvo el mismo error.
Cómo lo resolví:
- Volví a copiar el contenido de https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale/es.yml pero esta vez lo pegué en un archivo recién creado con el editor netBeans.
- reinició webRick.
- problema resuelto.
Atentamente,
Víctor
El problema con la pregunta original estaba en RedCloth. Estaba experimentando el mismo problema y simplemente actualizando a la versión más reciente de la gema RedCloth (actualmente 4.2.7) solucionó el problema.
El consejo anterior de Honza y FlyboyArt es sólido y debes arreglar cualquier YAML personalizado que tengas, pero con RedCloth siendo tan popular como lo es, la mayoría de los usuarios que encuentren esta pregunta y que también usen RedCloth deben asegurarse de que su GemFile tenga esta línea agregada:
gem ''RedCloth'', ">= 4.2.7"
Elimine las bases de database.rb
no utilizadas de database.rb
. Si usa MySQL y no hay PostgreSQL, entonces elimine el código de la databases.yml
de databases.yml
PG de databases.yml
.
En mi caso hubo 2 problemas.
- Como mencionó @stwienert, la representación de matriz fue un problema.
- Una cosa más fue, si una Cadena comenzada con% {var} recibí una excepción de Parse. Tuve que cambiar las cadenas en consecuencia para evitar comenzar con% {var}
Por ejemplo, si la cadena fue
%{user_name} welcome to %{application_name}
- Esto arrojó un error
Para arreglarlo tuve que cambiarlo a
Hi, %{user_name} welcome to %{application_name}
Espero que esto ayude a alguien.
Saludos,
Shardul.
Es un problema de bundler 1.0.10: detalles aquí
Intenta solo bajar la fecha del paquete
La causa raíz fue descrita en muchos lugares y la resumiré nuevamente.
Hay dos analizadores yaml por defecto, Psych es el nuevo, el que deberías estar usando. Syck es el anterior, no se mantiene y se está muriendo, actualmente se utiliza como respaldo para cuando no hay libyaml presente (generalmente, los sistemas que no son de Linux).
Lo importante es que tienes algún yaml inválido en alguna parte . Es muy probable que esté en sus archivos de traducción (tuve strings sin comillas con%). Simplemente intente cargar todos sus archivos yml con YAML.load_file en el cuadro de producción y verá cuál es el que está roto.
Lo mejor es arreglar tus archivos YAML
Aquí está cómo usar IRB para que no necesite la consola de rieles que probablemente no funciona:
require ''yaml''
YAML::ENGINE.yamler = ''psych''
YAML.load_file(''config/locales/xxx.en.yml'')
obtendrá una buena salida que le indicará dónde está el problema:
Psych::SyntaxError: couldn''t parse YAML at line 25 column 17
from /home/xxx/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych.rb:148:in `parse''
from /home/xxx/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych.rb:148:in `parse_stream''
from /home/xxx/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych.rb:119:in `parse''
from /home/xxx/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych.rb:106:in `load''
from /home/xxx/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/psych.rb:205:in `load_file''
from (irb):10
from /home/xxx/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>''
Lo que lo solucionó en mi causa era un archivo de traducción YAML mal formado en:
config/locales/bg.yml
Corregí el error YAML y todo estaba bien. :-)
Me encontré con esto porque estaba usando la biblioteca r18n en una aplicación de Sinatra
que estoy compilando , y en mi archivo de traducción tenía lo siguiente:
day: !!pl
0: 0 days
1: 1 day
n: %1 days
que solía funcionar bien en un proyecto anterior bajo Ruby 1.8.7
, pero que estaba fallando bajo Ruby 1.9.3
.
Una respuesta de @SB me dio la pista que necesitaba para resolver mi problema. El YAML más nuevo se estaba resistiendo al %1
. Algunas excavaciones rápidas y un experimento con irb
y ahora sé que la versión más nueva del analizador YAML
requiere que coloques comillas alrededor de las cadenas que comienzan con %1
, así que simplemente cambié mi traducción para ser
day: !!pl
0: 0 days
1: 1 day
n: "%1 days"
y voila - el desagradable mensaje de error desapareció.
Me las arreglé para solucionar este problema instalando gem psych dentro del grupo: desarrollo y: prueba.
gem ''psych''
Mi aplicación regular Rails 3 también tenía este problema, porque estaba usando un archivo yaml localizado para Fecha / Hora.
Como puede ver en este commit github.com/rails/rails/commit/dc94d81 esto puede ser fácil "reparado" colocando el conjunto en líneas separadas.
- order: [ :year, :month, :day ]
18 + order:
19 + - :year
20 + - :month
21 + - :day
Necesito comprobar si hay errores en los archivos .yml, he encontrado un problema en mi base de datos.yml
Obtuve este error al tratar de conectarme a un db remoto con la contraseña ''p@ssword''
y me ''p@ssword''
cuenta de que a psych no le gusta el símbolo ''@''
. Cambió la contraseña de DB y el problema resuelto.
Para aquellos que persiguen este problema, acabo de descubrir que my database.yml desencadenaba este error porque no tenía espacio entre la contraseña: la palabra clave y la contraseña. Un error casi invisible, y con una base de datos.yml que había funcionado sin errores en una versión anterior de los rieles.
Para mi caso, no es un problema Bundle: (Se supone Ruby 1.9)
- Ruby, por defecto, usa ''psych'' (biblioteca yaml más nueva y mantenida que enlaza a la biblioteca C: libyaml) si libyaml está presente
- De lo contrario, Ruby usa ''syck'' (viejo y no mantenido)
- YAML :: ENGINE.yamler = ''syck'' obligará a Ruby a usar ''syck'' en una máquina donde ''psych'' también está instalado
Más información aquí: requiere "yaml" no usa psych como predeterminado
Para otras personas que miran esto, encontré el problema en rerun.txt
que fue llamado por config/cucumber.yml
en una aplicación de Rails. rerun.txt
se configuró para almacenar la prueba de falla de pepino más reciente y de alguna manera había ingresado caracteres extraños para una prueba de pepino en la consola.
Eso fue difícil de encontrar. Ojalá hubiera visto la respuesta de Glenn Rempe hace un tiempo.
Para otros que leen esto, obtuve este error después de hacer un error tipográfico en la configuración de mi base de datos - /config/database.yml
Pshych parse es una mierda para el núcleo. No estoy seguro de si esta es una solución elegante, pero puedo solucionar este problema desinstalándola.
gem uninstall psych
Repare su código yaml definitivamente, no solo ''enmascare'' el problema real forzando a YAMl a usar ''syck''. Tuve el mismo problema y encontré declaraciones yml mal formadas en mis archivos de localización. Si solo fuerza el uso del analizador anterior, no obtendrá los beneficios de todo el trabajo en el nuevo analizador en otro lugar de su proyecto.
Si eres como yo y te enfrentas a un proyecto (heredado) con cientos de accesorios, unas pocas líneas de Ruby te pueden ahorrar horas:
require ''yaml''
d = Dir.new(''test/fixtures/'')
d.each do |file|
begin
f = YAML.load_file(''test/fixtures/'' + file)
rescue StandardError
puts "failed to read test/fixtures/#{file}: #{$!}"
end
end
Simplemente colócalo en la raíz de Rails y ejecútalo, basura cuando hayas terminado.
Tienes un código de YAML inválido en alguna parte. Quiero decir inválido para Psych (el nuevo analizador de ruby YAML).
Si no puede (o no quiere) reparar su código YAML, intente cargar el antiguo analizador YAML (syck), agregando esto al comienzo de config/boot.rb
require ''yaml''
YAML::ENGINE.yamler = ''syck''
Es solo una solución "rápida y sucia", lo sé
Tuve el mismo problema con ruby 1.9.2-p180, yendo a 1.9.2-p290, resolví esto para mí
Tuve este problema Mi problema era que tenía una pestaña adicional en mi archivo database.yml.
Tuve este problema porque había usado una pestaña en lugar de espacios
Tuve un problema realmente extraño porque tuve espacios después. P.ej:
title: "NASA"
No funcionó, pero
title:"NASA"
Hizo.
Tuve un problema similar con un archivo de traducción de YAML mal formado. Usó una variable antes de definirla. Lo siguiente estuvo mal:
...
messages:
...
<<: *errors_messages
...
messages: &errors_messages
...
Tenía que ser cambiado a:
...
messages: &errors_messages
...
messages:
...
<<: *errors_messages
...
Entonces comenzó a funcionar de nuevo.
Un pequeño ajuste en la respuesta de Paul Raupach que, cuando se ejecuta desde un directorio, encuentra todos los archivos * .yml recursivamente en todos los subdirectorios y prueba el archivo. Lo ejecuté desde mi directorio raíz de Rails.
require ''yaml''
d = Dir["./**/*.yml"]
d.each do |file|
begin
puts "checking : #{file}"
f = YAML.load_file(file)
rescue StandardError
puts "failed to read #{file}: #{$!}"
end
end
Una de las posibles causas es que los valores de mapeo no están permitidos en este contexto en la línea ...
Aquí hay un ejemplo de YAML incorrecto (usuario: no debería contener ningún valor en realidad, porque contiene elementos secundarios alguna clave y alguna otra tecla)
customer: Customer
user: User
some_key: value
some_other_key: value 2
No es una tarea trivial encontrar tal problema, especialmente si tienes un gran archivo YAML.
Creé una expresión regular bastante simple para detectar tales cosas. Lo revisé en RubyMine
^(/s+)[''"/w]+:/s?[''"/w]+.*/n/1/s/s
¡Ten cuidado! No funciona correctamente con caracteres especiales como å ø æ, etc.
Déjame saber en los comentarios si funcionó para ti :)