这是this question的后续行动。
当我在Windows上发出 gem update
命令时,无论什么时候到达
宝石的最新版本没有Windows二进制文件,它会尝试
构建原生扩展,当然会失败。例如:
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.
至少要求所需平台的旧的1.x前行为 使更新成为可能。现在我无法更新,除非我卸载 麻烦的宝石(目前是sqlite3-ruby和hpricot),运行更新, 然后使用--version开关重新安装宝石。
有没有人能解决这个难题,还是我们坚持下去?
注意:
$ gem -v
1.2.0
$ ruby -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
注意(2008年9月26日):我刚刚更新到gems 1.3.0并且此问题仍然存在。
注意(2008年11月18日):刚刚更新到宝石1.3.1并且问题仍然存在。
注意(2009年4月28日):最新版本的Gems(1.3.2)现在会跳过更新期间构建本机扩展失败的任何宝石;换句话说,问题是固定的。万岁!
答案 0 :(得分:4)
Gems,从version 1.3.2开始,现在将跳过无法构建的宝石,因此将Rubygems更新为最新版本,此处讨论的问题应该得到解决。
gem update --system
以下解决方案现已弃用,但我将其保留在此处以供记录。
Ruby论坛上的started a thread on this issue(它是邮件列表的前端)。有一些有趣的讨论;值得一读。在那里,甚至有一个非常hacky解决这个问题的方法:
`gem.bat outdated`.split(/\n/).map{|z|z.scan(/^[^[:space:]]+/)}.flatten.each{|z| `gem.bat update #{z}`}
它调用gem outdated
命令并构建所有过时宝石的列表。然后它遍历列表并为每个单独的过时gem调用gem update
。如果一个失败,它只会移动到下一个。
答案 1 :(得分:2)
似乎我们被卡住了。我发现here上一个版本(1.2.4)没有mswin32 gem,我试图在我的计算机上安装它并遇到同样的问题。
安装以前的版本可以正常工作:
gem install sqlite3-ruby --version '1.2.3'
答案 2 :(得分:2)
执行以下命令,它应该有效:
gem install sqlite3-ruby --platform=mswin32
答案 3 :(得分:1)
查看sqlite3-ruby的RubyForge file list显示版本1.2.3具有使用Visual Studio 6和MinGW构建的gem(sqlite3-ruby-1.2.3-mswin32.gem& sqlite3-ruby- 1.2.3 86 mingw32.gem)。但是,版本1.2.4没有任何此类预先构建的宝石。
如果安装了Visual Studio 6或MinGW并且已设置编译器环境变量(至少对于Visual Studio 6但不确定MinGW),则gem应在安装期间构建。我不确定这些宝石是否会在较新版本的Visual Studio下构建。