Nach dem Aktualisieren der Edelsteine habe ich Folgendes:
/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 Schienen 3.0.3
Versucht, Edelstein RedCloth neu zu installieren, hat nicht geholfen, System will nur 4.2.3 Version verwenden
Irgendeine Idee, wie man das behebt? Vielen Dank
ruby-on-rails-3
yaml
redcloth
Megas
quelle
quelle
Antworten:
Sie haben irgendwo einen ungültigen YAML-Code. Ich meine ungültig für Psych (den neuen Ruby YAML Parser).
Wenn Sie Ihren YAML-Code nicht reparieren können (oder wollen), versuchen Sie, den alten YAML-Parser (syck) zu laden, und fügen Sie diesen am Anfang von hinzu
config/boot.rb
require 'yaml' YAML::ENGINE.yamler = 'syck'
Ich weiß, es ist nur eine schnelle und schmutzige Lösung
quelle
Meine reguläre Rails 3-App hatte ebenfalls dieses Problem, da ich eine lokalisierte Yaml-Datei für Datum / Uhrzeit verwendete.
Wie Sie in diesem Commit https://github.com/rails/rails/commit/dc94d81 sehen können, kann dies einfach "behoben" werden, indem das Array in separaten Zeilen platziert wird.
- order: [ :year, :month, :day ] 18 + order: 19 + - :year 20 + - :month 21 + - :day
quelle
Eine kleine Änderung an Paul Raupachs Antwort, die, wenn sie aus einem Verzeichnis ausgeführt wird, alle * .yml-Dateien rekursiv in allen Unterverzeichnissen findet und die Datei testet. Ich habe es von meinem Rails-Root-Verzeichnis aus ausgeführt.
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
quelle
Die Grundursache wurde an vielen Stellen beschrieben und ich werde sie noch einmal zusammenfassen.
Es gibt zwei Standard-Yaml-Parser. Psych ist der neue, den Sie verwenden sollten. Syck ist das alte, es wird nicht gewartet und stirbt, es wird derzeit als Ersatz verwendet, wenn kein Libyaml vorhanden ist (normalerweise Nicht-Linux-Systeme).
Das Wichtigste ist , dass Sie irgendwo ein ungültiges Yaml haben . Es befindet sich höchstwahrscheinlich in Ihren Übersetzungsdateien (ich hatte nicht zitierte Zeichenfolgen mit%). Versuchen Sie einfach, alle Ihre yml-Dateien mit YAML.load_file auf die Produktionsbox zu laden, und Sie werden sehen, welche die defekte ist.
quelle
Ich hatte dieses Problem, weil ich anstelle von Leerzeichen einen Tabulator verwendet hatte
quelle
Am besten reparieren Sie Ihre YAML-Dateien
So verwenden Sie irb, damit Sie die Rails-Konsole nicht benötigen, die wahrscheinlich nicht funktioniert:
require 'yaml' YAML::ENGINE.yamler = 'psych' YAML.load_file('config/locales/xxx.en.yml')
Sie erhalten eine schöne Ausgabe, die Ihnen sagt, wo das Problem liegt:
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>'
quelle
Korrigieren Sie unbedingt Ihren Yaml-Code und maskieren Sie nicht nur das eigentliche Problem, indem Sie YAMl zwingen, "syck" zu verwenden. Ich hatte das gleiche Problem und fand in meinen Lokalisierungsdateien fehlerhafte yml-Anweisungen. Wenn Sie nur die Verwendung des älteren Parsers erzwingen, erhalten Sie nicht die Vorteile aller Arbeiten am neuen Parser an anderer Stelle in Ihrem Projekt.
quelle
Das Problem mit der ursprünglichen Frage war in RedCloth. Ich hatte das gleiche Problem und durch einfaches Aktualisieren auf die neueste Version des RedCloth-Gems (derzeit 4.2.7) wurde das Problem behoben.
Die obigen Ratschläge von Honza und FlyboyArt sind zutreffend und Sie sollten jede benutzerdefinierte YAML korrigieren, die Sie haben. Da RedCloth jedoch genauso beliebt ist, sollten die meisten Benutzer, die diese Frage finden und auch RedCloth verwenden, sicherstellen, dass in ihrem GemFile diese Zeile hinzugefügt wurde:
gem 'RedCloth', ">= 4.2.7"
quelle
Bei anderen, die dies lesen, wurde dieser Fehler angezeigt, nachdem ich in meiner Datenbankkonfiguration einen Tippfehler gemacht hatte.
/config/database.yml
quelle
Es ist ein Bundler 1.0.10-Problem: Details hier
Versuchen Sie einfach, den Bundler herunter zu aktualisieren
quelle
Was es in meiner Sache behoben hat, war in der Tat eine fehlerhafte YAML-Übersetzungsdatei in:
config/locales/bg.yml
Der YAML-Fehler wurde korrigiert und alles war in Ordnung. :-)
quelle
Für diejenigen, die dieses Problem verfolgen, habe ich gerade festgestellt, dass meine database.yml diesen Fehler auslöste, da zwischen dem Kennwort: keyword und dem Kennwort kein Leerzeichen stand. Ein fast unsichtbarer Fehler und mit einer database.yml, die bei einer früheren Version von Rails fehlerfrei funktioniert hatte.
quelle
Ich habe diesen Fehler erhalten, als ich versucht habe, mit dem Passwort eine Verbindung zu einer entfernten Datenbank herzustellen,
'p@ssword'
und festgestellt, dass psych das'@'
Symbol nicht mag . Das DB-Passwort wurde geändert und das Problem behoben.quelle
Ich hatte dieses Problem. Mein Problem war, dass ich eine zusätzliche Registerkarte in meiner Datei database.yml hatte.
quelle
Ich bin darauf gestoßen, als ich die r18n-Bibliothek in einer
Sinatra
App verwendet habe, die ich erstelle , und in meiner Übersetzungsdatei hatte ich Folgendes:day: !!pl 0: 0 days 1: 1 day n: %1 days
was früher in einem älteren Projekt unter gut funktionierte
Ruby 1.8.7
, aber unter scheiterteRuby 1.9.3
.Eine Antwort von @SB gab mir den Hinweis, den ich brauchte, um mein Problem zu lösen. Die neuere YAML sträubte sich gegen die
%1
. Ein bisschen schnelles Graben und ein Experiment mitirb
und ich weiß jetzt, dass die neuere Version desYAML
Parsers erfordert, dass Sie Anführungszeichen um Zeichenfolgen setzen, die mit beginnen%1
, also habe ich einfach meine Übersetzung geändertday: !!pl 0: 0 days 1: 1 day n: "%1 days"
und voila - böse Fehlermeldung verschwand.
quelle
In meinem Fall handelt es sich nicht um ein Bundle-Problem: (Ruby 1.9 wird angenommen)
Weitere Infos hier: require "yaml" verwendet psych nicht als Standard
quelle
Ich schaffe es, dieses Problem zu beheben, indem ich gem psych in group: development und: test installiere.
gem 'psych'
quelle
Ich hatte das gleiche Problem mit Ruby 1.9.2-p180, das durch 1.9.2-p290 gelöst wurde
quelle
Obwohl die Antwort von @Vicvega möglicherweise funktioniert oder nicht (hat sie nicht getestet), verstößt sie gegen das gemeinsame Prinzip "Konvention über Konfiguration" von Rails und Ruby und sollte mit Sorgfalt behandelt werden (und noch mehr in der Zusammenarbeit) obwohl die "Konfiguration" in diesem Fall nicht großartig ist
Also geht meine Stimme (wenn ich stimmen könnte) für diejenigen, die vorgeschlagen haben, die Syntaxfehler in den YAML-Dateien zu beseitigen.
Jetzt ... um den Fehler zu beheben, war es für mich eine Art Newby-Fehler. Ich hatte nicht die Gebietsschemadatei, die ich als Standard definiert hatte,
Config/application.rb
in meinemConfig/locales
Verzeichnisfröhliche Codierung
quelle
Müssen .yml-Dateien auf Fehler überprüft werden, habe ich ein Problem in meiner database.yml gefunden
quelle
Ich hatte ein ähnliches Problem mit einer fehlerhaften YAML-Übersetzungsdatei. Es wurde eine Variable verwendet, bevor sie definiert wurde. Folgendes war falsch:
... messages: ... <<: *errors_messages ... messages: &errors_messages ...
Es musste geändert werden zu:
... messages: &errors_messages ... messages: ... <<: *errors_messages ...
Dann fing es wieder an zu arbeiten.
quelle
In meinem Fall gab es 2 Probleme.
Zum Beispiel, wenn die Zeichenfolge war
%{user_name} welcome to %{application_name}
- Dies warf einen FehlerUm das Problem zu beheben, musste ich es ändern
Hoffe das hilft jemandem.
Grüße,
Shardul.
quelle
YAML
Datei Anführungszeichen um die Zeichenfolge zu setzen, sohello: %{user_name} welcome to %{application_name}
wirdhello: "%{user_name} welcome to %{application_name}"
anstatt Ihren Satz ändern zu müssen, die der Wagen das Pferd führt , ist.Nun, nur für den Fall, dass dies hilft ...
Was ich getan habe:
- Alle auswählen und von https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale/es.yml in ein neues es kopieren . yml mit notepad ++
- Ich habe versucht, diese neue Datei mit dem netBeans IDE-Texteditor anzusehen. Ich habe eine Warnung zum sicheren Laden mit utf8 erhalten (kann den genauen Text nicht abrufen). Daher wurde es mit diesem Texteditor nicht geöffnet.
- wechselte die lokale durch configuration / application.rb i18n
- als ich eine irb-Seite lud, bekam ich "konnte YAML in Zeile 0 Spalte 0 nicht analysieren" mit Bezug auf Psych.
- Ging zum IRB und lud die Datei mit Syck, es war in Ordnung; wechselte zu psych und bekam den gleichen Fehler.
Wie ich es gelöst habe:
- ging zurück, um den Inhalt von https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale/es.yml zu kopieren, aber dieses Mal habe ich ihn in eine neu erstellte Datei mit eingefügt netBeans-Editor.
- webRick neu gestartet.
- Problem gelöst.
Beste Grüße,
Victor
quelle
Entfernen Sie nicht verwendete Datenbanken aus
database.rb
. Wenn Sie MySQL verwenden und kein PostgreSQL vorhanden ist, löschen Sie den PG-Datenbankcode ausdatabases.yml
.quelle
Pshych Parse ist bis ins Mark saugen. Ich bin nicht sicher, ob dies eine elegante Lösung ist, aber ich schaffe es, dieses Problem durch Deinstallation zu beheben.
gem uninstall psych
quelle
gem "psych" cannot be uninstalled because it is a default gem
Ich hatte ein sehr, sehr seltsames Problem, weil ich danach Leerzeichen hatte. Z.B:
title: "NASA"
Hat nicht funktioniert, aber
title:"NASA"
Hat.
quelle
Wenn Sie wie ich sind und vor einem Projekt (geerbt) mit Hunderten von Fixtures stehen, können Sie mit ein paar Zeilen Ruby Stunden sparen:
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
Legen Sie es einfach in Ihr Rails-Stammverzeichnis und führen Sie es aus. Wenn Sie fertig sind, werfen Sie es in den Papierkorb.
quelle
Für andere Leute, die sich das anschauten, fand ich das Problem, bei
rerun.txt
demconfig/cucumber.yml
in einer Rails-App angerufen wurde .rerun.txt
wurde konfiguriert, um den letzten Gurken-Fehlertest zu speichern, und ich hatte irgendwie seltsame Zeichen für einen Gurkentest in die Konsole eingegeben.Das war schwer zu finden. Ich wünschte, ich hätte Glenn Rempes Antwort vor einiger Zeit gesehen.
quelle
Eine der möglichen Ursachen ist, dass Mapping-Werte in diesem Zusammenhang in Zeile ... nicht zulässig sind.
Hier ist ein falsches YAML-Beispiel (Benutzer: sollte eigentlich keinen Wert enthalten, da es untergeordnete Elemente some_key und some_other_key enthält)
customer: Customer user: User some_key: value some_other_key: value 2
Es ist keine triviale Aufgabe, ein solches Problem zu finden, insbesondere wenn Sie eine riesige YAML-Datei haben.
Ich habe einen ziemlich einfachen regulären Ausdruck erstellt, um solche Dinge zu erkennen. Ich habe es in RubyMine überprüft
^(\s+)['"\w]+:\s?['"\w]+.*\n\1\s\s
Achtung! Es funktioniert nicht richtig mit speziellen Zeichen wie å ø æ usw.
Lass es mich in den Kommentaren wissen, wenn es für dich funktioniert hat :)
quelle