尽管使检查成功,但找不到ruby.h库(ies);在建造红矿时

时间:2016-09-05 03:53:43

标签: ruby redmine

所以我安装Redmine并在安装完所有先决条件后,下一步是(我的家是/ home / sbh /)

/home/sbh/SW/Ruby/dev/execprefix/bin/bundle install --path vendor/bundle --without development test

导致(几个)错误,例如;

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory: /home/sbh/SW/Redmine/redmine/vendor/bundle/ruby/2.4.0
  /gems/sqlite3-1.3.11/ext/sqlite3
/home/sbh/SW/Ruby/dev/execprefix/bin/ruby -r 
./siteconf20160904-12703-1l1dktl.rb extconf.rb
mkmf.rb can't find header files for ruby at /home/sbh/SW/Ruby
  /dev/execprefix/lib/ruby/include/ruby.h
extconf failed, exit code 1

Gem files will remain installed in /home/sbh/SW/Redmine/redmine/vendor
  /bundle/ruby/2.4.0/gems/sqlite3-1.3.11 for inspection.
Results logged to /home/sbh/SW/Redmine/redmine/vendor/bundle/ruby/2.4.0
  /extensions/x86_64-linux/2.4.0-static/sqlite3-1.3.11/gem_make.out
An error occurred while installing json (1.8.3), and Bundler cannot continue.
Make sure that `gem install json -v '1.8.3'` succeeds before bundling.

(我使用vendor / bundle因为我试图保持Ruby的东西处理redmine本地 - 如果我理解gem帮助正确安装的话)所以我试试这个;

sbh@sbh-laptop-M18 ~/SW/Redmine/redmine $ /home/sbh/SW/Ruby
  /dev/execprefix/bin/gem install json -v '1.8.3'
Building native extensions.  This could take a while...
ERROR:  Error installing json:
ERROR: Failed to build gem native extension.

current directory: /home/sbh/SW/Ruby/dev/execprefix/lib/ruby/gems/2.4.0
  /gems/json-1.8.3/ext/json/ext/generator
/home/sbh/SW/Ruby/dev/execprefix/bin/ruby -r 
./siteconf20160904-13928-17xfuw8.rb extconf.rb
mkmf.rb can't find header files for ruby at /home/sbh/SW/Ruby
  /dev/execprefix/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /home/sbh/SW/Ruby/dev/execprefix
  /lib/ruby/gems/2.4.0/gems/json-1.8.3 for inspection.
Results logged to /home/sbh/SW/Ruby/dev/execprefix/lib/ruby/gems/2.4.0
  /extensions/x86_64-linux/2.4.0-static/json-1.8.3/gem_make.out

我确实检查过该位置不好,即使最低的文件夹也不存在,即(没有 / include / );

sbh@sbh-MacBookPro ~ $ ls /home/sbh/SW/Ruby/dev/execprefix/lib/ruby/
2.4.0  gems  site_ruby  vendor_ruby

此外, make check 在svn中构建Ruby成功了(我理解这是dev分支,所以我不知道为什么我需要apt-get install任何ruby-devs);

 svn co https://svn.ruby-lang.org/repos/ruby/trunk ruby

所以我这样做了;

find . -name ruby.h -print -exec ls -Alrt {} \;

产生四个文件;

sbh@sbh-laptop-M18 ~/SW/Ruby $ find . -name ruby.h -print -exec ls 
  -Alrt {} \;
./dev/ruby/include/ruby.h
  -rw-r--r-- 1 sbh sbh 868 Sep  4 20:29 ./dev/ruby/include/ruby.h
./dev/ruby/include/ruby/ruby.h
  -rw-r--r-- 1 sbh sbh 77600 Sep  4 20:29 ./dev/ruby/include/ruby/ruby.h
./dev/prefix/include/ruby-2.4.0/ruby.h
  -rw-r--r-- 1 sbh sbh 868 Sep  4 20:29 ./dev/prefix/include/ruby-
  2.4.0/ruby.h
./dev/prefix/include/ruby-2.4.0/ruby/ruby.h
  -rw-r--r-- 1 sbh sbh 77600 Sep  4 20:29 ./dev/prefix/include/ruby-
   2.4.0/ruby/ruby.h

我不知道为什么有四个或两个根据大小判断,虽然我不认为它们是链接...(?)所以我添加到〜/ .profile ,位于底部;

export LD_LIBRARY_PATH=/home/sbh/SW/Ruby/dev/prefix/include/ruby-
  2.4.0/ruby/
export LD_LIBRARY_PATH=/home/sbh/SW/Ruby/dev/ruby/include/ruby/

然后运行 sudo ldconfig source~ / .profile 。但是在关闭终端并再次启动它之后它仍然无法工作。

互联网产生了这些想法;

Error while installing json gem 'mkmf.rb can't find header files for ruby'

nokogiri will not install - ERROR: Failed to build gem native extension

`require': no such file to load -- mkmf (LoadError)

但他们似乎都希望OP能够 sudo apt-get install ruby​​-dev ,而我只想解决我的本地树问题。 - 所以没有apt-get。

难道这不是超级简单吗?或者Redmine以某种方式期望这些头文件的某个路径?对于默认的Ruby安装,有些东西可能是硬编码的吗?

有什么想法吗?

P.S。我想要一个本地的'像Anaconda / Python一样构建Ruby ......

P.P.S。我也意识到我也可以使用apt-get只将包下载到存档,然后使用dpkg或ar提取文件,然后将它们移动到我的Ruby安装中(我想也是一个路径),但没有添加任何新的PPA,我的默认源只覆盖ruby2.3-dev而我的svn拉2.4。我不知道是否有什么不同但我不知道为什么我无法从ruby-lang.org获得所有内容...

P.P.P.S。在构建Ruby时,我把所有东西放在这里;

./configure --prefix=/home/sbh/SW/Ruby/dev/prefix 
  --exec-prefix=/home/sbh/SW/Ruby/dev/execprefix 
  --oldincludedir=/home/sbh/SW/Ruby/dev/oldincludedir

1 个答案:

答案 0 :(得分:1)

您正在使用the new-and-shiny 2.4.0

它最近得到了一个“统一整数类型”,它将BigDecimal和Fixnum组合成整数。

您的项目依赖于the json rubygem,这也是基于C的扩展。 json gem v1.8.3不知道处理数字的新方法。

以下是如何要求json gem的更新版本

在你的Gemfile中,添加:

gem 'json', '~> 2.0', '>= 2.0.2'

(可以理解为“至少2.0.x系列”,还有“至少2.0.2”。)

希望这有帮助!

PS:Here is a typical patch更新了这种处理数字的新方式的基于C的扩展。

PPS:解决方法是使用ruby-build并自己构建一个Ruby 2.3.1,它将支持Redmine默认安装的gem版本。