更新宝石后我得到了这个:
/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>'
红宝石1.9.2-P136 rails 3.0.3
试图重新安装gem RedCloth,没有帮助,系统只想使用4.2.3版本
知道怎么解决吗?感谢
答案 0 :(得分:166)
您的某处有无效的YAML代码。我的意思是Psych(新的ruby YAML解析器)无效。
如果你不能(或不想)修复你的YAML代码,请尝试加载旧的YAML解析器(syck),在config/boot.rb
require 'yaml'
YAML::ENGINE.yamler = 'syck'
这只是一个“快速而肮脏”的修复,我知道
答案 1 :(得分:49)
我的常规Rails 3应用程序也遇到了这个问题,因为我在日期/时间使用了本地化的yaml文件。
正如您在此提交中所看到的https://github.com/rails/rails/commit/dc94d81 通过将数组放在单独的行中,可以很容易地“修复”。
- order: [ :year, :month, :day ]
18 + order:
19 + - :year
20 + - :month
21 + - :day
答案 2 :(得分:20)
对Paul Raupach的答案稍作调整,当从目录运行时,在所有子目录中递归查找所有* .yml文件并测试该文件。我从我的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
答案 3 :(得分:17)
许多地方都描述了根本原因,我将再次总结一下。
有两个默认的yaml解析器Psych是新的,你应该使用的那个。 Syck是旧的,它没有维护和死亡,它目前用作没有libyaml存在时的后退(通常是非Linux系统)。
重要的是你在某个地方有一些无效的yaml 。它很可能是在你的翻译文件中(我有不带引号的字符串,用%表示)。只需尝试在生产盒上加载YAML.load_file的所有yml文件,你就会看到哪一个是坏的。
答案 4 :(得分:13)
我遇到了这个问题,因为我使用的是标签而不是空格
答案 5 :(得分:13)
最好修复您的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>'
答案 6 :(得分:6)
绝对修复你的yaml代码,不要强迫YAMl使用'syck'来掩盖真正的问题。我有同样的问题,在我的本地化文件中发现格式错误的yml语句。如果您只是强制使用较旧的解析器,那么您将无法从项目中其他位置的新解析器中获得所有工作的好处。
答案 7 :(得分:6)
原始问题的问题出在RedCloth中。我遇到了同样的问题,只是更新到最新版本的RedCloth gem(目前4.2.7)修复了这个问题。
以上来自Honza和FlyboyArt的建议是合理的,您应该修复任何自定义的YAML,但是RedCloth很受欢迎,大多数用户发现这个问题也使用RedCloth应该确保他们的GemFile添加了这一行:
gem 'RedCloth', ">= 4.2.7"
答案 8 :(得分:4)
对于阅读此内容的其他人,我在数据库配置中输入拼写错误后出现此错误 - /config/database.yml
答案 9 :(得分:3)
这是一个捆绑包1.0.10问题:details here
尝试降级捆绑器
答案 10 :(得分:2)
在我的事业中修正了它的确是格式错误的YAML翻译文件:
config/locales/bg.yml
更正了YAML的错误,一切都很好。 : - )
答案 11 :(得分:2)
我设法通过在组内部安装gem psych来解决这个问题:开发和:测试。
gem 'psych'
答案 12 :(得分:2)
当我在我正在构建的Sinatra
应用中使用r18n library时,我遇到了这个问题,在我的翻译文件中,我有以下内容:
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"
并且吵闹 - 错误的错误消息消失了。
答案 13 :(得分:2)
我有这个问题。我的问题是我的database.yml文件中有一个额外的选项卡。
答案 14 :(得分:2)
对于那些追求这个问题的人,我刚刚发现我的database.yml触发了这个错误,因为它在password:keyword和密码之间没有空格。一个几乎不可见的错误,以及在早期版本的rails上没有错误的database.yml。
答案 15 :(得分:2)
对于我的情况,它不是Bundle问题:(假设Ruby 1.9)
答案 16 :(得分:1)
我遇到了与格式错误的YAML翻译文件类似的问题。它在定义变量之前使用了变量。以下是错误的:
...
messages:
...
<<: *errors_messages
...
messages: &errors_messages
...
必须改为:
...
messages: &errors_messages
...
messages:
...
<<: *errors_messages
...
然后它再次开始工作。
答案 17 :(得分:1)
我尝试使用密码'p@ssword'
连接到远程数据库时遇到此错误,并发现psych不喜欢'@'
符号。更改了数据库密码并解决了问题。
答案 18 :(得分:1)
如果你像我一样面对一个拥有数百个灯具的项目(继承),那么几行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根目录并运行它,在完成后将其删除。
答案 19 :(得分:1)
需要检查.yml文件是否有错误,我在database.yml
中发现了问题答案 20 :(得分:1)
就我而言,有两个问题。
例如,如果字符串是
%{user_name} welcome to %{application_name}
- 这引发了错误
要修复它,我必须将其更改为
Hi, %{user_name} welcome to %{application_name}
希望这有助于某人。
此致
Shardul。
答案 21 :(得分:1)
虽然@Vicvega给出的答案可能会或可能不会起作用(没有测试),但这违反了Rails和Ruby的共同原则“约定优于配置”,应该小心对待(和甚至在协作工作中更多),即使这种情况下的“配置”不是很好
所以我的投票(如果我可以投票)给那些建议消除YAML文件中的语法错误的人。
现在......为了解决这个错误,对我来说这是一个新的错误,我没有我在Config/application.rb
Config/locales
中定义的默认语言环境文件目录
快乐编码
答案 22 :(得分:1)
嗯,以防这有助于...
我做了什么:
- 选择全部并从https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale/es.yml复制到带有记事本++的新es.yml中
- 尝试用netBeans IDE文本编辑器观察这个新文件,我收到了关于使用utf8安全加载的警告(无法回想起确切的文本)。因此没有用这个文本编辑器打开它
- 切换本地直通配置/ application.rb i18n
- 当我加载一个irb页面时,我得到“无法解析YAML在第0行第0列”,指的是Psych。
- 去IRB并用syck加载文件就可以了;切换到心理并得到同样的错误。
我是如何解决的:
- 回去复制https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale/es.yml中的内容,但这次我用netBeans编辑器将其粘贴到新创建的文件中。
- 重启webRick。
- 问题解决了。
最诚挚的问候,
维克多
答案 23 :(得分:1)
我和ruby 1.9.2-p180有同样的问题,转到1.9.2-p290为我解决了这个问题
答案 24 :(得分:1)
从database.rb
删除未使用的数据库。
如果您使用MySQL并且没有PostgreSQL,则从databases.yml
删除PG数据库代码。
答案 25 :(得分:1)
Pshych解析很糟糕。我不确定这是否是优雅的解决方案,但我设法通过卸载来解决这个问题。
gem uninstall psych
答案 26 :(得分:1)
我有一个非常非常奇怪的问题因为我之后有空格。 E.g:
title: "NASA"
没有用,但是
title:"NASA"
依然如故
答案 27 :(得分:0)
对于其他人来说,我发现rerun.txt
中的问题是由config/cucumber.yml
在Rails应用中调用的。 rerun.txt
被配置为存储最近的黄瓜失败测试,并且我在控制台中以某种方式输入了奇怪的角色进行黄瓜测试。
很难找到。希望我曾经见过Glenn Rempe's answer。
答案 28 :(得分:0)
可能的原因之一是在此上下文中不允许映射值...
这是一个不正确的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
小心!对于像åøæ等特殊字符,它无法正常工作。
请在评论中告诉我它是否适合你:)