7

这是对这个问题的跟进。

当我在 Windows 上发出gem update命令时,只要它到达一个最新版本没有 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.

要求所需平台的旧的 pre-1.x 行为至少使更新成为可能。现在我根本无法更新,除非我卸载麻烦的 gem(目前是 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;换句话说,问题是固定的。万岁!

4

4 回答 4

4

Gems,从1.3.2 版本开始,现在将跳过无法构建的 gem,因此将 Rubygems 更新到最新版本,这里讨论的问题应该得到解决。

gem update --system

现在不推荐使用以下解决方案,但我将其留在这里记录。

我在 Ruby 论坛(它是邮件列表的前端)上启动了一个关于这个问题的线程。有一些有趣的讨论;值得一读。那里甚至有一个非常hacky的解决方案:

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

它调用该gem outdated命令并构建所有过时 gem 的列表。然后它遍历列表并调用gem update每个单独的过时 gem。如果一个失败,它就会转移到下一个。

于 2008-09-27T21:22:09.843 回答
2

看来我们被困住了。我在这里发现最后一个版本(1.2.4)没有mswin32 gem,我尝试将它安装在我的计算机上并遇到了同样的问题。

安装以前的版本可以正常工作:

gem install sqlite3-ruby --version '1.2.3'
于 2008-09-25T21:21:06.737 回答
2

执行以下命令,它应该可以工作:

gem install sqlite3-ruby --platform=mswin32
于 2010-09-22T19:07:21.217 回答
1

查看 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。我不确定这些 gem 是否会在较新版本的 Visual Studio 下构建。

于 2008-10-01T01:41:58.820 回答