构建本机扩展时出错,导致非sudo命令无法工作



我正在升级现有的设置,以使用Rails5beta 3。作为其中的一部分,我已经将Ruby升级到2.2.4版本(使用RVM),即

rvm install 2.2.4
rvm use 2.2.4

完成后,我将尝试安装Railsgem。但是,运行

sudo gem install rails

给我错误

错误:安装mime类型数据时出错:mime类型的数据需要Ruby版本>=2.0。

读过这个问题后,我查看了我的Ruby版本:

ruby --version   =>   ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-linux]
sudo ruby --version   =>   ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]

我似乎无法从sudo访问RVM,所以我尝试使用gem install rails,但在构建本机扩展时也失败了:

Building native extensions.  This could take a while...
ERROR:  Error installing rails:
        ERROR: Failed to build gem native extension.
    /home/ubuntu/.rvm/rubies/ruby-2.2.4/bin/ruby -r ./siteconf20160405-31973-l7bzq7.rb extconf.rb
checking if the C compiler accepts ... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.
Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/home/ubuntu/.rvm/rubies/ruby-2.2.4/bin/$(RUBY_BASE_NAME)
        --help
        --clean
/home/ubuntu/.rvm/rubies/ruby-2.2.4/lib/ruby/2.2.0/mkmf.rb:456:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
        from /home/ubuntu/.rvm/rubies/ruby-2.2.4/lib/ruby/2.2.0/mkmf.rb:571:in `block in try_compile'
        from /home/ubuntu/.rvm/rubies/ruby-2.2.4/lib/ruby/2.2.0/mkmf.rb:522:in `with_werror'
        from /home/ubuntu/.rvm/rubies/ruby-2.2.4/lib/ruby/2.2.0/mkmf.rb:571:in `try_compile'
        from extconf.rb:80:in `nokogiri_try_compile'
        from extconf.rb:87:in `block in add_cflags'
        from /home/ubuntu/.rvm/rubies/ruby-2.2.4/lib/ruby/2.2.0/mkmf.rb:619:in `with_cflags'
        from extconf.rb:86:in `add_cflags'
        from extconf.rb:336:in `<main>'
extconf failed, exit code 1
Gem files will remain installed in /home/ubuntu/.rvm/gems/ruby-2.2.4/gems/nokogiri-1.6.7.2 for inspection.
Results logged to /home/ubuntu/.rvm/gems/ruby-2.2.4/extensions/x86_64-linux/2.2.0/nokogiri-1.6.7.2/gem_make.out

我看到了两种解决方案:

  1. sudo命令中使用的Ruby升级到2.0或更高版本(最好是2.2.4)。我不知道如何做到这一点,因为sudo rvm导致找不到rvm的命令
  2. 修复使用gem install rails时出现的错误。再说一遍,我不知道该怎么做

以下哪一个是最简单的(或者有更简单的解决方案吗),我该怎么做?

看起来您已经在单用户模式下安装了RVM。这就是sudo rvm返回命令未找到错误的原因。您可以在此处找到有关RVM模式的更多信息:https://rvm.io/rvm/install#2-将rvm加载到您的shell会话即功能中。

但是,根据您提供的日志,错误在于安装Nokogiri。请先使用命令sudo apt-get install ruby-dev zlib1g-dev liblzma-dev安装开发头文件。详情如下:http://www.nokogiri.org/tutorials/installing_nokogiri.html

您调用的sudo命令将作为根用户执行,因此它不会加载您的配置文件设置(这是加载rvm ruby版本的地方,如果它像我使用的rbenv一样工作,则从未使用过rvm)

另一方面,每当Building本机扩展在安装gem时失败时,就意味着你需要一个库的开发包(C/C++头文件),而这个库实际上是完成整个任务的库(ruby gem通常是它的包装器),所以例如,如果你想构建ruby,你需要来自linux发行版的ruby开发包(如果你使用OSX,则需要来自brew),来自postgres的开发包来构建pggem等。

最新更新