【问题标题】:Gem update on Windows - is it broken?Windows 上的 Gem 更新 - 是否损坏?
【发布时间】:2008-09-25 17:06:36
【问题描述】:

这是this question的后续行动。

当我在 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.

至少要求所需平台的旧的 pre-1.x 行为 使更新成为可能。现在我根本无法更新,除非我卸载 麻烦的 gems(目前是 sqlite3-ruby 和 hpricot),运行更新, 然后使用 --version 开关重新安装 gems。

有没有人能解决这个难题,还是我们被困住了?


注意:

$ 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;换句话说,问题是固定的。万岁!

【问题讨论】:

  • 您是指 2009 年 4 月 28 日吗?还是你追求时间旅行者徽章?
  • 如果我想安装一个新的 gem 并且安装时失败了怎么办? Gems 1.3.2 解决了吗??
  • 是的,这个问题早就解决了。到今天为止,我们现在是 RubyGems 1.3.7 版。

标签: windows ruby rubygems


【解决方案1】:

version 1.3.2 开始,Gems 现在将跳过无法构建的 gem,因此将 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 调用 gem update。如果一个失败,它就会转移到下一个。

【讨论】:

    【解决方案2】:

    看来我们被困住了。我发现here 上一个版本(1.2.4)没有mswin32 gem,我尝试在我的电脑上安装它并遇到了同样的问题。

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

    gem install sqlite3-ruby --version '1.2.3'
    

    【讨论】:

    • 是的,这确实有效,这就是我所做的。然后问题是当您随后运行 gem update 时;它会自动尝试更新到 1.2.4。
    【解决方案3】:

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

    gem install sqlite3-ruby --platform=mswin32
    

    【讨论】:

    • 这个帮助了我。谢谢
    【解决方案4】:

    查看 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 -x86-mingw32.gem)。但是,1.2.4 版没有任何此类预构建的 gem。

    如果您安装了 Visual Studio 6 或 MinGW 并设置了编译器环境变量(至少对于 Visual Studio 6 但不确定 MinGW),则应该在安装期间构建 gem。我不确定这些 gem 是否会在较新版本的 Visual Studio 下构建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 2011-09-03
      • 2012-08-03
      相关资源
      最近更新 更多