Windows上的宝石更新-损坏了吗?
这是该问题的后续措施。
当我在Windows上发出gem update
命令时,只要
gem的最新版本没有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。
有人能解决这个难题吗?还是我们坚持下去?
笔记:
$ 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日):刚刚更新为gems 1.3.1,问题仍然存在。
注意(2009年4月28日):最新版本的Gems(1.3.2)现在会跳过在更新过程中无法构建本机扩展的所有gem;换句话说,问题已解决。万岁!
解决方案
看来我们被困住了。我在这里发现最新版本(1.2.4)没有mswin32 gem,我尝试将其安装在计算机上并遇到相同的问题。
安装以前的版本可以正常工作:
gem install sqlite3-ruby --version '1.2.3'
从1.3.2版开始,宝石现在将跳过无法构建的宝石,因此将Rubygems更新到最新版本,并且应该解决此处讨论的问题。
gem update --system
现在不建议使用以下解决方案,但我将其留在此处记录。
我在Ruby论坛(关于邮件列表的前端)上针对此问题启动了一个话题。有一些有趣的讨论;值得一读。那里甚至有一个非常棘手的解决方案:
`gem.bat outdated`.split(/\n/).map{|z|z.scan(/^[^[:space:]]+/)}.flatten.each{|z| `gem.bat update #{z}`}
它调用gem outdated
命令并建立所有过时的gem的列表。然后,它遍历列表,并为每个过时的宝石调用"宝石更新"。如果一个失败了,它只会移动到下一个。
查看sqlite3-ruby的RubyForge文件列表,可以发现1.2.3版具有使用Visual Studio 6和MinGW构建的gem(sqlite3-ruby-1.2.3-mswin32.gem和sqlite3-ruby-1.2.3-x86- mingw32.gem)。但是,版本1.2.4没有任何此类预构建的gem。
如果安装了Visual Studio 6或者MinGW,并且设置了编译器环境变量(至少对于Visual Studio 6却不确定MinGW),则应在安装过程中生成gem。我不确定这些宝石是否会在Visual Studio的较新版本中构建。
执行以下命令,它应该可以工作:
gem install sqlite3-ruby --platform=mswin32