rails的错误,无法parsingYAML
更新gem后,我有这个:
/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
试过重新安装gemRedCloth,没有帮助,系统只想使用4.2.3版本
任何想法如何解决它? 谢谢
您的某处有无效的YAML代码。 我的意思是无效的心(新的rubyYAML分析器)。
如果你不能(或者不想)修正你的YAML代码,试着加载旧的YAMLparsing器(syck),在config/boot.rb
的开头添加这个
require 'yaml' YAML::ENGINE.yamler = 'syck'
我知道这只是一个“快速和肮脏”的修复
我的常规Rails 3应用程序也有这个问题,因为我使用本地化的YAML文件的date/时间。
正如你可以看到在这个提交https://github.com/rails/rails/commit/dc94d81这可以很容易地“固定”通过将数组放在单独的行。;
- order: [ :year, :month, :day ] 18 + order: 19 + - :year 20 + - :month 21 + - :day
对Paul Raupach的答案略作调整,当从一个目录运行时,所有子目录都会recursion地查找所有* .yml文件并testing该文件。 我从我的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
根源在很多地方都有描述,我会再次总结一下。
有两个默认的yamlparsing器Psych是新的,你应该使用的。 Syck是旧的,它没有维护和死亡,目前用于当没有libyaml礼物(通常是非linux系统)的时候。
重要的是你有一些无效的yaml 。 这是最有可能在你的翻译文件(我有没有引用的string%)。 只要尝试加载所有的YAML文件在生产框中的YAML.load_file,你会看到哪一个是坏的。
我有这个问题,因为我用了一个选项卡,而不是空格
最好修复你的YAML文件
这里是如何使用irb,所以你不需要轨道控制台可能不工作:
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代码,不是通过迫使YAMl使用'syck'来“掩盖”真正的问题。 我有这个相同的问题,在我的本地化文件中发现格式不正确的XML语句。 如果您只是强制使用较旧的parsing器,那么您将无法从项目中其他位置的新parsing器获得所有工作的好处。
原来的问题是在RedCloth中。 我遇到了同样的问题,只是更新到RedCloth gem(目前4.2.7)的最新版本,解决了这个问题。
Honza和FlyboyArt的上述build议是合理的,您应该修复您拥有的任何自定义YAML,但是RedCloth的受欢迎程度如此之高,大多数用户在使用RedCloth时发现此问题也应该确保他们的GemFile添加了此行:
gem 'RedCloth', ">= 4.2.7"
对于读这个的人来说,在我的数据库configuration中input错误之后,我得到了这个错误 – /config/database.yml
这是一个捆绑1.0.10问题: 细节在这里
尝试只是downdate打包机
什么修复了我的原因确实格式错误的YAML翻译文件在:
config/locales/bg.yml
更正了YAML的错误,一切正常。 🙂
对于那些追求这个问题,我刚刚发现我的database.yml正在触发这个错误,因为它之间的密码:关键字和密码之间没有空格。 一个几乎看不见的错误,并与一个早期版本的rails工作没有错误的database.yml。
我有这个问题。 我的问题是我有一个额外的选项卡在我的database.yml文件。
我遇到了这个,因为我正在使用我正在创build的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
parsing器需要你引用以%1
开头的string,所以我只是改变了我的翻译
day: !!pl 0: 0 days 1: 1 day n: "%1 days"
瞧 – 糟糕的错误信息消失了。
对于我的情况,这不是一个捆绑问题:(假设Ruby 1.9)
- Ruby,默认情况下,如果存在libyaml,则使用'psych'(更新和维护的yaml库链接到C库:libyaml)
- 否则,Ruby使用“syck”(旧的而不是维护)
- YAML :: ENGINE.yamler ='syck'会强制Ruby在安装了'psych'的机器上使用'syck'
更多的信息在这里: 要求“yaml”不使用心灵默认
我设法解决这个问题,通过安装gem心灵组内:发展和:testing。
gem 'psych'
我有与ruby1.9.2-P180相同的问题,去1.9.2-P290解决了这个问题
尽pipe@Vicvega给出的答案可能会也可能不会(不testing它),它违背了Rails和Ruby共同的原则“公约重于configuration” ,应该小心处理(甚至在协作工作中),甚至虽然在这种情况下的“configuration”并不好
所以我的投票(如果我可以投票)为那些build议消除YAML文件中的语法错误。
现在…为了解决这个错误,对我来说,这是一种新的错误,我没有在Config/locales
目录中的Config/application.rb
中定义的默认Config/locales
文件
快乐的编码
需要检查错误的.yml文件,我发现在我的database.yml中的问题
我有一个与格式不正确的YAML翻译文件类似的问题。 它在定义它之前使用了一个variables。 以下是错误的:
... messages: ... <<: *errors_messages ... messages: &errors_messages ...
它必须改为:
... messages: &errors_messages ... messages: ... <<: *errors_messages ...
然后它又开始工作了。
我得到这个错误,试图连接到一个远程数据库与密码'p@ssword'
并认为心理不喜欢'@'
符号。 更改了数据库密码并解决了问题。
在我的情况有两个问题。
- 正如@stwienert所提到的,数组表示是一个问题。
- 还有一件事是,如果一个string以%{var}开头,我收到一个Parseexception。 我必须相应地更改string以避免从%{var}开始
例如,如果string是
%{user_name} welcome to %{application_name}
– 这会引发错误
要解决它,我不得不改变它
Hi, %{user_name} welcome to %{application_name}
希望这有助于某人。
问候,
Shardul。
那么,以防万一这有助于…
我做了什么:
– select全部并从https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale/es.yml复制到一个新的es.yml与记事本++
– 试图用netBeans IDE文本编辑器观看这个新文件,我用utf8得到了关于安全加载的警告(无法回想确切的文字)。 所以没有用这个文本编辑器打开它。
– 切换本地通过configuration/ application.rb i18n
– 当我加载一个irb页面时,我得到了“无法parsingYAML在0行0列”指的是Psych。
– 去IRB和加载文件与syck它是好的; 切换到心理,并得到同样的错误。
我如何解决它:
– 回去复制从https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale/es.yml的内容,但这次我用netBeans编辑器将它粘贴到一个新创build的文件中。;
– 重新启动webRick。
– 问题解决了。
最好的祝福,
胜利者
从database.rb
删除未使用的database.rb
。 如果你使用MySQL并且没有PostgreSQL,那么从databases.yml
删除PG数据库代码。
Pshychparsing是吸引核心。 我不知道这是否是优雅的解决scheme,但我设法解决这个问题,通过卸载它。
gem uninstall psych
我有一个非常奇怪的问题,因为我之后有空位。 例如:
title: "NASA"
没有工作,但
title:"NASA"
没有。
如果你像我一样面对一个项目(inheritance)数百个灯具,几行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的根目录下运行,当你完成后就把它垃圾了。
对于看这个的其他人,我在rerun.txt
发现了这个问题,这个问题在Rails应用中被config/cucumber.yml
调用。 rerun.txt
configuration为存储最近的黄瓜失败testing,我不知何故进入奇怪的angular色黄瓜testing在控制台。
那很难find。 希望我已经看到了Glenn Rempe的回答 。
其中一个可能的原因是映射值不允许在这种情况下行… … –
这是一个不正确的YAML示例(用户:实际上不应该包含任何值,因为它包含子项some_key和some_other_key)
customer: Customer user: User some_key: value some_other_key: value 2
find这样的问题并不是一件容易的事情,特别是如果你有一个巨大的YAML文件。
我创build了一个非常简单的正则expression式来检测这样的事情。 我在RubyMine中检查过它
^(\s+)['"\w]+:\s?['"\w]+.*\n\1\s\s
小心! 它不适用于特殊的字符,如øøæ等
让我知道在评论中,如果它为你工作:)