2008-09-25 32 views
7

Đây là bản theo dõi this question.Cập nhật Gem trên Windows - có bị hỏng không?

Khi tôi thực hiện lệnh gem update trên Windows, bất cứ khi nào nó được cho một viên ngọc có phiên bản mới nhất KHÔNG có mã nhị phân Windows, nó sẽ cố gắng xây dựng mở rộng bản địa mà sẽ, tất nhiên, thất bại. Ví dụ:

Updating sqlite3-ruby 
Building native extensions. This could take a while... 
ERROR: While executing gem ... (Gem::Installer::ExtensionBuildError) 
    ERROR: Failed to build gem native extension. 

c:/ruby/bin/ruby.exe extconf.rb update 
checking for fdatasync() in rt.lib... no 
checking for sqlite3.h... no 

nmake 
'nmake' is not recognized as an internal or external command, 
operable program or batch file. 

Hành vi trước 1.x của yêu cầu nền tảng bắt buộc ít nhất được cập nhật có thể. Bây giờ tôi không thể cập nhật ở tất cả trừ khi tôi gỡ bỏ các đá quý rắc rối (hiện tại sqlite3-ruby và hpricot), chạy bản cập nhật, sau đó cài đặt lại các đá quý bằng cách sử dụng chuyển đổi --version.

Có ai có giải pháp cho câu hỏi hóc búa này hay chúng ta bị mắc kẹt với nó?


Lưu ý:

$ gem -v 
1.2.0 

$ ruby -v 
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] 

Note (26 September 2008): tôi chỉ cập nhật để đá quý 1.3.0 và vấn đề này vẫn còn.

Lưu ý (18 tháng 11 năm 2008): Chỉ cập nhật lên đá quý 1.3.1 và sự cố vẫn tiếp diễn.

Lưu ý (28 tháng 4 năm 2009): Phiên bản mới nhất của Gems (1.3.2) hiện bỏ qua bất kỳ đá quý nào không xây dựng tiện ích mở rộng gốc trong quá trình cập nhật; nói cách khác, vấn đề là cố định. Hoan hô!

+0

Bạn có nghĩa là 28 tháng 4 năm 2009? Hoặc là bạn sau khi huy hiệu du lịch thời gian? –

+0

Điều gì sẽ xảy ra nếu tôi muốn cài đặt một viên đá quý mới và nó không thành công khi cài đặt? Gems 1.3.2 đã giải quyết vấn đề này chưa ?? –

+0

Có, vấn đề này từ lâu đã được khắc phục. Tính đến hôm nay, chúng ta đang ở phiên bản RubyGems 1.3.7. –

Trả lời

4

Gems, tính đến version 1.3.2, bây giờ sẽ bỏ đá quý mà không xây dựng, vì vậy cập nhật Rubygems lên phiên bản mới nhất và các vấn đề thảo luận ở đây nên được giải quyết.

gem update --system 

Các giải pháp sau đây hiện đang bị phản đối, nhưng tôi để nó ở đây để ghi lại.

I started a thread on this issue trên Diễn đàn Ruby (đây là giao diện người dùng của danh sách gửi thư). Có một số cuộc thảo luận thú vị; nó đáng đọc. Thậm chí còn có một giải pháp rất hacky cho vấn đề này trên đó:

`gem.bat outdated`.split(/\n/).map{|z|z.scan(/^[^[:space:]]+/)}.flatten.each{|z| `gem.bat update #{z}`} 

Nó kêu gọi lệnh gem outdated và xây dựng một danh sách của tất cả các đá quý lỗi thời. Sau đó nó lặp lại trong danh sách và gọi gem update cho mỗi đá quý lỗi thời cá nhân. Nếu một thất bại, nó chỉ di chuyển lên kế tiếp.

2

Dường như chúng tôi đang bị kẹt. Tôi đã tìm thấy here rằng không có mswin32 gem cho phiên bản cuối cùng (1.2.4), tôi đã cố gắng cài đặt nó trên máy tính của mình và gặp vấn đề tương tự.

Cài đặt phiên bản trước đó hoạt động tốt:

gem install sqlite3-ruby --version '1.2.3' 
+0

Có, điều đó không có tác dụng và đó là những gì tôi đã làm. Vấn đề là sau đó khi bạn chạy gem update; nó sẽ tự động cố gắng cập nhật lên 1.2.4. –

1

Nhìn vào RubyForge file list cho sqlite3-ruby tiết lộ rằng phiên bản 1.2.3 có viên ngọc đã được xây dựng sử dụng Visual Studio 6 và MinGW (sqlite3-ruby-1.2.3-mswin32.gem & sqlite3-ruby-1.2.3- x86-mingw32.gem). Tuy nhiên, phiên bản 1.2.4 không có bất kỳ đá quý được xây dựng sẵn như vậy.

Nếu bạn đã cài đặt Visual Studio 6 hoặc MinGW và cài đặt biến môi trường trình biên dịch (ít nhất là cho Visual Studio 6 nhưng không chắc chắn về MinGW), đá quý sẽ được xây dựng trong khi cài đặt. Tôi không chắc chắn nếu những viên đá quý sẽ xây dựng theo phiên bản mới hơn của Visual Studio.

2

Thực hiện lệnh dưới đây và nó cũng làm việc:

gem install sqlite3-ruby --platform=mswin32 
+0

điều này đã giúp tôi. Cảm ơn bạn – Radek

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