在更新到ruby1.9.2上的rubygems 1.5.0后,GemCutter rake build现在会抛出 "undefined method 'write'for #<Syck::Emitter:...."。[英] GemCutter rake build now throws &quot;undefined method &#39;write&#39; for #<Syck::Emitter:....&quot; after updating to rubygems 1.5.0 on ruby 1.9.2 on Windows

本文是小编为大家收集整理的关于在更新到ruby1.9.2上的rubygems 1.5.0后,GemCutter rake build现在会抛出 "undefined method 'write'for #<Syck::Emitter:...."。的处理方法,想解了在更新到ruby1.9.2上的rubygems 1.5.0后,GemCutter rake build现在会抛出 "undefined method 'write'for #<Syck::Emitter:...."。的问题怎么解决?在更新到ruby1.9.2上的rubygems 1.5.0后,GemCutter rake build现在会抛出 "undefined method 'write'for #<Syck::Emitter:...."。问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我刚刚将我的 Windows 2008 Server x64 机器更新为 ruby​​gems 1.5.0,现在我无法使用 Gemcutter 提供的 rake 任务 (rake clobber build) 构建 gem.我收到以下错误:

rake aborted!
undefined method `write' for #<Syck::Emitter:0x37dda38>
C:/Ruby192/lib/ruby/1.9.1/psych/visitors/emitter.rb:17:in `end_document'
C:/Ruby192/lib/ruby/1.9.1/psych/visitors/emitter.rb:17:in `visit_Psych_Nodes_Document'
C:/Ruby192/lib/ruby/1.9.1/psych/visitors/visitor.rb:10:in `accept'
C:/Ruby192/lib/ruby/1.9.1/psych/visitors/emitter.rb:10:in `block in visit_Psych_Nodes_Stream'
C:/Ruby192/lib/ruby/1.9.1/psych/visitors/emitter.rb:10:in `each'
C:/Ruby192/lib/ruby/1.9.1/psych/visitors/emitter.rb:10:in `visit_Psych_Nodes_Stream'
C:/Ruby192/lib/ruby/1.9.1/psych/visitors/visitor.rb:11:in `accept'
C:/Ruby192/lib/ruby/1.9.1/psych/nodes/node.rb:36:in `to_yaml'
C:/Ruby192/lib/ruby/1.9.1/psych.rb:166:in `dump'
C:/Ruby192/lib/ruby/1.9.1/psych/core_ext.rb:13:in `psych_to_yaml'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:706:in `node_export'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:706:in `add'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:706:in `encode_with'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:727:in `block (2 levels) in to_yaml'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:726:in `map'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:726:in `block in to_yaml'
C:/Ruby192/lib/ruby/1.9.1/syck.rb:401:in `call'
C:/Ruby192/lib/ruby/1.9.1/syck.rb:401:in `emit'
C:/Ruby192/lib/ruby/1.9.1/syck.rb:401:in `quick_emit'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:725:in `to_yaml'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/builder.rb:78:in `block (2 levels) in write_package'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/package/tar_output.rb:73:in `block (3 levels) in add_gem_contents'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/package/tar_writer.rb:83:in `new'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/package/tar_output.rb:67:in `block (2 levels) in add_gem_contents'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/package/tar_output.rb:65:in `wrap'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/package/tar_output.rb:65:in `block in add_gem_contents'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/package/tar_writer.rb:113:in `add_file'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/package/tar_output.rb:63:in `add_gem_contents'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/package/tar_output.rb:31:in `open'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/package.rb:68:in `open'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/builder.rb:77:in `block in write_package'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/builder.rb:76:in `open'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/builder.rb:76:in `write_package'
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/builder.rb:39:in `build'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/jeweler-1.5.2/lib/jeweler/commands/build_gem.rb:16:in `run'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/jeweler-1.5.2/lib/jeweler.rb:87:in `build_gem'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/jeweler-1.5.2/lib/jeweler/tasks.rb:84:in `block in define'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:636:in `call'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:636:in `block in execute'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:631:in `each'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:631:in `execute'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:597:in `block in invoke_with_call_chain'
C:/Ruby192/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2029:in `block (2 levels) in top_level'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2029:in `each'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2029:in `block in top_level'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2001:in `block in run'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:1998:in `run'
C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/bin/rake:31:in `<top (required)>'
C:/Ruby192/bin/rake:19:in `load'
C:/Ruby192/bin/rake:19:in `<main>'

基于使用包含:

Using rake (0.8.7)
Using bundler (1.0.10)
Using diff-lcs (1.1.2)
Using git (1.2.5)
Using jeweler (1.5.1)
Using json (1.5.1)
Using rcov (0.9.9)
Using rspec-core (2.1.0)
Using rspec-expectations (2.1.0)
Using rspec-mocks (2.1.0)
Using rspec (2.1.0)
Using syntax (1.0.0)
Using systemu (1.2.0)
Using win32console (1.3.0)

以及安装到系统中的以下 gems

activemodel (3.0.3, 3.0.1)
activerecord (3.0.3, 3.0.1)
activerecord-sqlserver-adapter (3.0.9, 3.0.6, 3.0.5)
activesupport (3.0.3, 3.0.1)
archive-tar-minitar (0.5.2)
arel (2.0.7, 2.0.3, 1.0.1)
builder (3.0.0, 2.1.2)
bundler (1.0.10, 1.0.7)
capistrano (2.5.19)
capistrano_winrm (0.0.1)
capybara (0.4.1.1, 0.4.0)
celerity (0.8.7, 0.8.6)
childprocess (0.1.6)
color (1.4.1)
columnize (0.3.2)
cucumber (0.10.0, 0.9.4)
culerity (0.2.15, 0.2.13)
dbi (0.4.5)
deprecated (3.0.0)
diff-lcs (1.1.2)
ffi (1.0.5 x86-mingw32, 1.0.4 x86-mingw32, 0.6.3 x86-mingw32)
gemcutter (0.6.1)
gherkin (2.3.3 x86-mingw32, 2.2.9 x86-mingw32)
git (1.2.5)
handsoap (1.1.8, 1.1.7)
highline (1.6.1)
hoe (2.9.1, 2.8.0)
httpclient (2.1.6.1, 2.1.6)
i18n (0.5.0, 0.4.2)
ironruby-dbi (0.1.0)
jeweler (1.5.2, 1.5.1)
json (1.5.1 x86-mingw32, 1.4.6 x86-mingw32)
json_pure (1.5.1, 1.4.6)
justeat (0.1.0, 0.0.2)
linecache19 (0.5.11)
macaddr (1.0.0)
mime-types (1.16)
minitest (2.0.2, 1.6.0)
mssqlclient (0.1.0)
net-scp (1.0.4)
net-sftp (2.0.5)
net-ssh (2.1.0, 2.0.23)
net-ssh-gateway (1.0.1)
net-ssh-multi (1.0.1)
net-ssh-shell (0.1.0)
nokogiri (1.4.4.1 x86-mingw32)
open4 (1.0.1)
Platform (0.4.0)
popen4 (0.1.2)
rack (1.2.1)
rack-test (0.5.7, 0.5.6)
rake (0.8.7)
rake-dotnet (1.0.2, 1.0.1, 0.2.2, 0.2.1, 0.2.0)
rake-remote_task (2.0.2)
rcov (0.9.9)
rdiscount (1.6.8, 1.6.5)
rdoc (3.5.3, 3.1, 2.5.8)
rdoc-data (2.5.3)
rspec (2.5.0, 2.3.0, 2.1.0, 2.0.1)
rspec-core (2.5.1, 2.3.1, 2.1.0, 2.0.1)
rspec-expectations (2.5.0, 2.3.0, 2.1.0, 2.0.1)
rspec-mocks (2.5.0, 2.3.0, 2.1.0, 2.0.1)
ruby-debug-base19 (0.11.24)
ruby-debug-ide (0.4.16)
ruby-odbc (0.99994, 0.99993, 0.99992)
ruby_core_source (0.1.4)
rubyforge (2.0.4)
rubygems-update (1.5.0)
rubyntlm (0.1.1)
rubyzip (0.9.4)
selenium-webdriver (0.1.2)
syntax (1.0.0)
systemu (1.2.0)
term-ansicolor (1.0.5)
trollop (1.16.2)
tzinfo (0.3.24, 0.3.23)
uuid (2.3.1)
vlad (2.1.0)
webrat (0.7.3, 0.7.2)
win32-api (1.4.8 x86-mingw32, 1.4.7 x86-mingw32)
win32-process (0.6.5)
win32console (1.3.0 x86-mingw32)
windows-api (0.4.0)
windows-pr (1.1.3, 1.1.2)
winrm (0.0.6)
xpath (0.1.3, 0.1.2)
解决方案

更新:#1239 升级到捆绑器 1.0.21 或 1.1 可能会解决问题.(感谢forfor的指点!)

gem install bundler
<小时>

这是 bundler 中的一个已知错误 (#1239).Larsch 在 Rakefile 顶部添加 require 'psych' 的解决方法对我的 Rails 项目没有帮助(无论出于何种原因——它根本没有改变任何东西),但是将 RUBYOPT='-rpsych' 设置为一种解决方法,就像这样,解决了问题:

RUBYOPT='-rpsych' bundle install

(感谢 Moro 指出这一点.)p>

似乎只需要安装和更新.应用程序本身(即调用 rake 等,即使使用 bundle exec)应该在不设置 RUBYOPT 的情况下继续运行.

<小时>

作为背景,仅仅需要 psych 模块会有所不同的原因似乎是:YAML 自动 使用(旧的)Syck 库,除非在需要 YAML 时加载 Psych,在这种情况下它使用 Psych.这种隐含的行为当然会导致 很多麻烦,包括我们在这里看到的问题.

本文地址:https://www.itbaoku.cn/post/786543.html