Cha*_*per 7 ruby windows rubygems
这是这个问题的后续行动.
当我gem update在Windows上发出命令时,每当它到达最新版本没有Windows二进制文件的gem时,它将尝试构建本机扩展,当然这将失败.例如:
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.
Run Code Online (Sandbox Code Playgroud)
要求所需平台的旧的1.x前行为至少使更新成为可能.现在我无法更新,除非我卸载麻烦的宝石(目前是sqlite3-ruby和hpricot),运行更新,然后使用--version开关重新安装宝石.
有没有人能解决这个难题,还是我们坚持下去?
注意:
$ gem -v
1.2.0
$ ruby -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
Run Code Online (Sandbox Code Playgroud)
注意(2008年9月26日):我刚刚更新到gems 1.3.0并且此问题仍然存在.
注意(2008年11月18日):刚刚更新到宝石1.3.1并且问题仍然存在.
注意(2009年4月28日):最新版本的Gems(1.3.2)现在跳过了更新过程中构建本机扩展失败的任何宝石; 换句话说,问题是固定的.万岁!
从版本 1.3.2开始,Gems 现在将跳过无法构建的 gem,因此将 Rubygems 更新到最新版本,这里讨论的问题应该得到解决。
gem update --system
Run Code Online (Sandbox Code Playgroud)
以下解决方案现已弃用,但我将其留在这里以供记录。
我在 Ruby 论坛(它是邮件列表的前端)上发起了关于此问题的主题。有一些有趣的讨论;值得一读。对于这个问题甚至有一个非常hacky的解决方案:
`gem.bat outdated`.split(/\n/).map{|z|z.scan(/^[^[:space:]]+/)}.flatten.each{|z| `gem.bat update #{z}`}
Run Code Online (Sandbox Code Playgroud)
它调用该gem outdated命令并构建所有过时 gem 的列表。然后它会遍历列表并调用gem update每个过时的 gem。如果一个失败,它就会转移到下一个。
| 归档时间: |
|
| 查看次数: |
6763 次 |
| 最近记录: |