2011-02-08 22 views
6

Tôi vừa cập nhật hộp Windows 2008 Server x64 của mình rubygems 1.5.0 và bây giờ tôi không thể xây dựng một viên ngọc bằng cách sử dụng các nhiệm vụ cào (rake clobber build) mà Gemcutter cung cấp. Tôi nhận được lỗi sau:GemCutter rake build now ném "undefined method 'write' cho # <Syck :: Emitter: ...." sau khi cập nhật lên rubygems 1.5.0 trên ruby ​​1.9.2 trên Windows

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

dựa trên sử dụng một gói chứa:

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) 

và đá quý sau được cài đặt vào hệ thống

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) 
+0

Tôi đã giải quyết vấn đề này bằng cách hạ cấp phiên bản rubygems của tôi xuống 1,3,7 trong thời gian chờ đợi. –

+0

Đây là sự cố GitHub cho sự cố: https://github.com/carlhuda/bundler/issues/1239 –

Trả lời

20

Cập nhật: Có báo cáo trong #1239 rằng việc nâng cấp lên gói 1.0.21 hoặc 1.1 có thể khắc phục được sự cố. (Nhờ forforf cho con trỏ!)

gem install bundler 

Đây là một lỗi được biết đến (#1239) trong bundler. Cách giải quyết của Larsch về việc thêm require 'psych' ở đầu Rakefile không giúp ích cho dự án Rails của tôi (vì bất kỳ lý do gì - nó đơn giản là không thay đổi gì), nhưng thiết lập RUBYOPT='-rpsych' như một giải pháp, như vậy, đã giải quyết được vấn đề:

RUBYOPT='-rpsych' bundle install 

(Nhờ Moro cho pointing this out.)

Nó chỉ dường như là cần thiết để cài đặt và cập nhật. Bản thân ứng dụng (ví dụ: gọi rake vv, ngay cả với bundle exec) sẽ tiếp tục hoạt động mà không cần đặt RUBYOPT.


Đối với nền, lý do tại sao chỉ đơn giản yêu cầu module psych làm cho một sự khác biệt có vẻ là điều này: YAML automatically sử dụng (cũ) thư viện Syck, trừ khi Psych được nạp lúc YAML là cần thiết, trong trường hợp này nó sử dụng Psych. Tất nhiên, loại hành vi tiềm ẩn này gây ra a lot of trouble, bao gồm cả vấn đề mà chúng tôi thấy ở đây.

+0

Đã xảy ra sự cố với máy tính cửa sổ bạn bè và sử dụng đá quý có: git => 'git: // ... 'nguồn ... Không hiểu tại sao .. nhưng nó đã hoạt động! cảm ơn! –

+0

Bản cập nhật mới cho trình bao đã khắc phục sự cố cho tôi: 'gem install bundler -v1.0.21.rc'. Tìm thấy thông qua [# 1239 bug thread] (https://github.com/carlhuda/bundler/issues/1239). – forforf

+0

@forforf: Cảm ơn! 1.0.21.rc đã không giúp đỡ tôi, nhưng 1.1.rc đã làm. Tôi đã cập nhật câu trả lời. –

1

Đã có một vấn đề tương tự trên debian. Hoàn nguyên về phiên bản gói cũ hơn (1.0.9) thay vì 1.0.10 đã khắc phục sự cố.

7

This Hoe bug report mô tả công việc xung quanh: Thêm yêu cầu 'tâm lý' trước bất kỳ điều gì khác trong Rakefile. Làm việc cho tôi.

1

Tôi gặp sự cố này khi cố chạy ứng dụng đường ray với Puma làm máy chủ. Câu trả lời hóa ra là những gì người dân ở đây đang nói, tức là nếu không được chỉ định, Ruby sẽ cố gắng sử dụng syck (trình phân tích cú pháp yaml cũ) thay cho psych (trình phân tích cú pháp yaml mới). Tôi phải sửa đổi tệp config/boot.rb bằng các dòng sau:

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

Để buộc dừng sử dụng syck và chuyển sang chế độ tâm lý. Sau đó mọi thứ đều hiệu quả.

Các vấn đề liên quan