GemCutter rake build now throws the "undefined write method for # <Syck :: Emitter: ...." after upgrading to rubygems 1.5.0 on ruby ​​1.9.2 on Windows

I just updated my box for Windows 2008 Server x64 to rubygems 1.5.0, and now I can’t build the gem using the rake ( rake clobber build ) tasks that the Gemcutter provides. I get the following error:

 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>' 

based on the use of a package containing:

 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) 

and the following systems installed in the system

 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) 
+6
windows ruby rubygems
source share
4 answers

Update:. # 1239 reports that upgrading to any provider of packages 1.0.21 or 1.1 may be a problem. (Thanks forforf for the pointer!)

 gem install bundler 

This is a known bug ( # 1239 ) in the bundler. Larsch's workaround to add require 'psych' at the top of the Rakefile did not help my Rails project (for some reason, it just didn’t change anything), but setting RUBYOPT='-rpsych' as a workaround, as well, the problem is:

 RUBYOPT='-rpsych' bundle install 

(Thanks to Moreau for pointing this out .)

It only seems necessary to install and upgrade. The application itself (i.e. calling rake, etc., even with bundle exec ) should continue to function without installing RUBYOPT.


For the background, the reason the psychic module is simply required is as follows: YAML automatically uses the (older) Syck library, unless Psych loads when YAML is required, in which case it uses Psych. Of course, this implicit behavior causes a lot of problems , including the problem that we see here.

+20
source share

This Hoe bug report describes the work: add require "psych" before anything else in the Rakefile. It works for me.

+7
source share

There was a similar problem on debian. Reverting to an older version of bundler (1.0.9) instead of 1.0.10 fixed the problem.

+1
source share

I ran into this problem when trying to run a rails application with Puma as a server. The answer turned out to be what people said here, i.e. If not specified, Ruby will try to use syck (old yaml parser) instead of psych (new yaml parser). I had to modify the config/boot.rb with the following lines:

 require 'psych' YAML::ENGINE.yamler = 'psych' 

To make him stop using syck and switch to the psyche. After that, everything worked.

+1
source share

All Articles