我正在尝试将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.
请注意,这是我第一次更新Rails,因为我去了OS X Mountain Lion。
我已经看到另一个关于这个问题的答案,据说要安装名为“ruby-termios”的宝石。我这样做了,并且那个gem安装得很好,但仍然存在依赖某处试图安装“termios”宝石的依赖。
答案 0 :(得分:4)
我最终将ruby-termios宝石克隆到我的仓库中。由于某些未知原因,作者将其命名为ruby-termios而不仅仅是termios。所以我重命名了gemspec。然后我修改了我的Gemfile使用:
gem 'termios', :path => 'termios'
然后我跑了:
bundle update
一切都恢复了。
答案 1 :(得分:2)
gem install ruby-termios
为我解决了制造问题;我希望你的Gemfile中的gem "ruby-termios"
也能正常工作。
看起来发生的事情是名为termios
(arika)的宝石的原始作者自2004年以来没有更新过宝石(v 0.9.4),但没有人拥有rubygems上的命名空间{{3} }。然后其他人(爱迪生)在github上发布了一个分叉http://rubygems.org/gems/termios,而某个 else (tylerrick)推出了一个名为ruby-termios
的新宝石...但当然在Ruby中,库仍然以termios
命名,因此该命令仍为require "termios"
。
答案 2 :(得分:2)
似乎在Gemfile中指定gem 'engineyard'
会导致bundler安装一些具有termios依赖性的古老版本(0.2.x)。
指定较新的(gem 'engineyard', '~> 2.3'
)将正确安装。