宝石を更新した後、私はこれを持っています:
/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 Rails 3.0.3
Gem RedClothを再インストールしようとしましたが、助けにはなりませんでした。システムは4.2.3バージョンのみを使用したいです
それを修正する方法はありますか?ありがとう
どこかに無効なYAMLコードがあります。私はPsychでは無効という意味です(新しいRuby YAMLパーサー)。
YAMLコードを修正できない場合(または修正したくない場合)は、古いYAMLパーサー(syck)をロードして、config/boot.rb
の先頭に追加してください。
require 'yaml'
YAML::ENGINE.yamler = 'syck'
それはただの「迅速で汚い」修正です、私は知っています
通常のRails 3アプリでもこの問題が発生しました。これは、日付/時刻にローカライズされたyamlファイルを使用していたためです。
このコミットでわかるように、 https://github.com/Rails/rails/commit/dc94d81 これは、別の行に配列を配置することで簡単に「修正」できます。
- order: [ :year, :month, :day ]
18 + order:
19 + - :year
20 + - :month
21 + - :day
Paul Raupachの回答を少し調整して、ディレクトリから実行すると、すべてのサブディレクトリですべての* .ymlファイルを再帰的に見つけて、ファイルをテストします。私はRails root dir。
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
根本原因は多くの場所で説明されており、もう一度要約します。
デフォルトのyamlパーサーには2つあり、Psychは新しいものであり、使用すべきものです。 Syckは古いもので、メンテナンスされておらず死にかけ、libyamlが存在しない場合のフォールバックとして現在使用されています(通常は非Linuxシステム)。
重要なことはどこかに無効なyamlがあるです。ほとんどの場合、翻訳ファイルに含まれています(%で囲まれた引用符で囲まれていない文字列がありました)。プロダクションボックスですべてのymlファイルをYAML.load_fileでロードしてみると、どれが壊れているかがわかります。
スペースの代わりにタブを使用していたため、この問題が発生しました
YAMLファイルを修正するのが最善です
irbの使用方法は次のとおりです。したがって、おそらく動作していないRailsコンソールは必要ありません。
require 'yaml'
YAML::ENGINE.yamler = 'psych'
YAML.load_file('config/locales/xxx.en.yml')
問題がどこにあるかを示す素晴らしい出力が得られます:
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>'
YAMlに強制的に「syck」を使用させることにより、実際の問題を「マスク」するだけでなく、yamlコードを絶対に修正します。これと同じ問題があり、ローカライズファイルで不正なymlステートメントが見つかりました。古いパーサーを使用することを強制する場合、プロジェクトの他の場所で新しいパーサーのすべての作業の利点を得ることができません。
元の質問の問題はRedClothにありました。私は同じ問題を経験しており、単にRedCloth gemの最新バージョン(現在4.2.7)に更新するだけで問題が修正されました。
HonzaとFlyboyArtからの上記のアドバイスは適切であり、カスタムYAMLを修正する必要がありますが、RedClothが人気を博しているため、RedClothを使用するこの質問を見つけるほとんどのユーザーは、GemFileに次の行を追加する必要があります:
gem 'RedCloth', ">= 4.2.7"
これを読んでいる他の人のために、データベース構成でタイプミスをした後にこのエラーが発生しました-/config/database.yml
これはバンドラー1.0.10の問題です。 詳細はこちら
バンドラーをダウンデートしてみてください
この問題を追求している人のために、password:キーワードとパスワードの間にスペースがないため、私のdatabase.ymlがこのエラーをトリガーしていることがわかりました。ほとんど目に見えないエラー、およびRailsの以前のバージョンでエラーなしで機能していたdatabase.ymlがあります。
私の原因でそれを修正したのは、実際には次の形式の不正なYAML翻訳ファイルでした。
config/locales/bg.yml
YAMLの間違いを修正しましたが、すべて問題ありませんでした。 :-)
私の場合、これはバンドルの問題ではありません:(Ruby 1.9が想定されています)
詳細はこちら: 「yaml」ではデフォルトでpsychを使用しないでください
私が構築しているSinatra
アプリで r18nライブラリ を使用していたときにこれに遭遇し、翻訳ファイルには次のものがありました。
day: !!pl
0: 0 days
1: 1 day
n: %1 days
以前のプロジェクトではRuby 1.8.7
で正常に動作していましたが、Ruby 1.9.3
では失敗していました。
@SBの回答は、問題を解決するために必要な手がかりを与えてくれました。新しいYAMLは%1
をしていました。 irb
を少し掘り下げて実験したところ、YAML
パーサーの新しいバージョンでは、%1
で始まる文字列を引用符で囲む必要があることがわかりました。私の翻訳は
day: !!pl
0: 0 days
1: 1 day
n: "%1 days"
そして出来上がり-厄介なエラーメッセージが消えました。
グループ:developmentおよび:test内にgem psychをインストールすることにより、この問題を修正することができます。
gem 'psych'
この問題がありました。私の問題は、database.ymlファイルに余分なタブがあったことです。
あなたが私のような人で、何百もの備品があるプロジェクト(継承)に直面している場合、数行のRubyで時間を節約できます:
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
Rails rootに入れて実行し、完了したらゴミ箱に移動してください。
私の場合、2つの問題がありました。
たとえば、文字列が
%{user_name} welcome to %{application_name}
-これはエラーを投げた
それを修正するために変更しなければなりませんでした
Hi, %{user_name} welcome to %{application_name}
これが誰かを助けることを願っています。
よろしく、
シャルドゥル。
不正な形式のYAML翻訳ファイルでも同様の問題が発生しました。定義する前に変数を使用しました。次は間違っていました。
...
messages:
...
<<: *errors_messages
...
messages: &errors_messages
...
次のように変更する必要がありました。
...
messages: &errors_messages
...
messages:
...
<<: *errors_messages
...
その後、再び機能し始めました。
精神分析は核心に吸い込まれます。これがエレガントなソリューションであるかどうかはわかりませんが、アンインストールすることでこの問題を解決できます。
gem uninstall psych
後にスペースがあったので、本当に奇妙な問題がありました。例えば。:
title: "NASA"
うまくいきませんでしたが、
title:"NASA"
した。
database.rb
から未使用のデータベースを削除します。 MySQLを使用し、PostgreSQLがない場合は、databases.yml
からPGデータベースコードを削除します。
.ymlファイルのエラーを確認する必要があります。database.ymlで問題が見つかりました
Ruby 1.9.2-p180で1.9.2-p290に行くと同じ問題があり、これを解決してくれました。
まあ、万が一これが役立つ場合...
私がしたこと:
-すべてを選択し、 https://github.com/svenfuchs/Rails-i18n/tree/master/Rails/locale/es.yml から新しいes.ymlにコピーします。 notepad ++
-この新しいファイルをnetBeans IDEテキストエディターで、utf8(正確なテキストを思い出せない)で安全なロードに関する警告が表示されました)で見ようとしました。このテキストエディタ。
-ローカルスルーconfiguration/application.rb i18nを切り替えました
[。
-IRBに行き、syckでファイルをロードしました。 psychに切り替えて、同じエラーが発生しました。
解決方法:
- https://github.com/svenfuchs/Rails-i18n/tree/master/Rails/locale/es.yml から内容をコピーするために戻ったが、今回は貼り付けたこれは、netBeansエディターで新しく作成されたファイルにあります。
-webRickを再起動しました。
- 問題が解決しました。
宜しくお願いします、
ビクター
パスワード'p@ssword'
を使用してリモートDBに接続しようとするとこのエラーが発生し、psychは'@'
記号を好まないことがわかりました。 DBパスワードの変更と問題の解決。
@Vicvegaによって与えられた答えは、動作する場合と動作しない場合があります(テストしませんでした)RailsおよびRuby共通原則 over configuration」であり、この場合の「configuration」は大きくはありませんが、注意して扱う必要があります(さらに共同作業ではさらに)
そのため、YAMLファイルの構文エラーを排除することを提案した人たちに投票します(投票できれば)。
今...エラーを解決するために、私にとってそれは一種の初心者エラーでした、私はConfig/application.rb
ディレクトリのConfig/locales
でデフォルトであると定義したロケールファイルを持っていませんでした
ハッピーコーディング
これを見ている他の人々のために、私はrerun.txt
によって呼び出されていたconfig/cucumber.yml
in Rails app。rerun.txt
は、最新のキュウリの失敗テストを保存するように構成されており、コンソールでキュウリのテスト用に奇妙な文字を入力しました。
それを見つけるのは大変でした。 グレンレンペの答え 少し前に見たかった。
考えられる原因の1つは、このコンテキストでは...行目のマッピング値は許可されていません
これは間違ったYAMLの例です(ユーザー:子項目some_keyとsome_other_keyが含まれているため、実際には値を含めるべきではありません)
customer: Customer
user: User
some_key: value
some_other_key: value 2
特に巨大なYAMLファイルがある場合、このような問題を見つけるのは簡単な作業ではありません。
そのようなことを検出するための非常に単純な正規表現を作成しました。 RubyMineで確認しました
^(\s+)['"\w]+:\s?['"\w]+.*\n\1\s\s
注意してください! åøæなどの特殊な文字では正しく動作しません。
それがあなたのために働いたなら、私にコメントで知らせてください:)