2

我正在尝试将 Rails 从 3.1.3 更新到 3.2.8。更改 rails gem 值并运行“bundle update rails”会尝试安装名为“termios”版本 0.9.4 的 gem,但失败并显示以下消息:

Installing termios (0.9.4) with native extensions 
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /Users/me/.rvm/rubies/ruby-1.9.3-p0/bin/ruby extconf.rb 
checking for termios.h... yes
checking for unistd.h... yes
creating Makefile

make
compiling termios.c
In file included from termios.c:10:
/Users/me/.rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/ruby/backward/rubyio.h:2:2:     warning: #warning use "ruby/io.h" instead of "rubyio.h"
termios.c: In function ‘Termios_to_termios’:
termios.c:182: error: ‘struct RArray’ has no member named ‘ptr’
termios.c:183: error: ‘struct RArray’ has no member named ‘ptr’
termios.c: In function ‘termios_tcgetattr’:
termios.c:200: error: ‘OpenFile’ undeclared (first use in this function)
make: *** [termios.o] Error 1

Gem files will remain installed in /Users/me/.rvm/gems/ruby-1.9.3-p0@mcp5/gems/termios-0.9.4 for inspection.
Results logged to /Users/me/.rvm/gems/ruby-1.9.3-p0@mcp5/gems/termios-0.9.4/./gem_make.out
An error occured while installing termios (0.9.4), and Bundler cannot continue.
Make sure that `gem install termios -v '0.9.4'` succeeds before bundling.

另请注意,这是我自从使用 OS X Mountain Lion 以来第一次更新 Rails。

我已经看到关于这个问题的另一个答案,它说要安装一个名为“ruby-termios”的gem。我这样做了,并且那个 gem 安装得很好,但是在某个地方仍然有一个依赖项试图安装“termios”gem。

4

3 回答 3

4

我最终将ruby​​-termios gem 克隆到我的仓库中。出于某种未知的原因,作者将其命名为 ruby​​-termios 而不仅仅是 termios。所以我重命名了gemspec。然后我修改了我的 Gemfile 以使用:

gem 'termios', :path => 'termios'

然后我跑了:

bundle update

一切都恢复正常了。

于 2012-08-21T14:31:17.090 回答
2

似乎gem 'engineyard'在您的 Gemfile 中指定会导致捆绑器安装一些具有 termios 依赖项的古老版本(0.2.x)。

指定较新的 ( gem 'engineyard', '~> 2.3') 将正确安装。

于 2014-07-28T01:35:45.693 回答
2

gem install ruby-termios为我解决了制作问题;我希望gem "ruby-termios"在您的 Gemfile 中也可以使用。

看起来发生的事情是,名为termios(arika) 的 gem 的原始作者自 2004 年(v 0.9.4)以来没有更新 gem,但没有人拥有 ruby​​gems http://rubygems.org/gems/termios上的命名空间。然后其他人(爱迪生)在 github https://github.com/edison/ruby-termios上做了一个分叉,还有其他(tylerrick)推了一个新的 gem,名为ruby-termios... 但当然在 Ruby 内部,这个库仍然被命名termios所以命令还在require "termios"

于 2013-01-25T19:06:44.263 回答