问题描述
OS: Ubuntu 18.04 GCC version: gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1) JRuby version: 9.2.8.0 Ruby version: 2.5.3
问题来源:尝试安装 pronto
gem(0.11.0 版)
运行 gem install pronto
时,gem 安装在依赖 rugged
gem 尝试构建本机扩展时失败,并出现以下错误:
-- Build files have been written to: /home/ubuntu/.rvm/gems/jruby-9.2.8.0/gems/rugged-1.0.1/vendor/libgit2/build
-- /usr/bin/make
checking for main() in -lgit2... RuntimeError: The compiler Failed to generate an executable file.
You have to install development tools first.
try_do at /home/ubuntu/.rvm/rubies/jruby-9.2.8.0/lib/ruby/stdlib/mkmf.rb:456
try_link0 at /home/ubuntu/.rvm/rubies/jruby-9.2.8.0/lib/ruby/stdlib/mkmf.rb:541
try_link at /home/ubuntu/.rvm/rubies/jruby-9.2.8.0/lib/ruby/stdlib/mkmf.rb:556
try_func at /home/ubuntu/.rvm/rubies/jruby-9.2.8.0/lib/ruby/stdlib/mkmf.rb:765
have_library at /home/ubuntu/.rvm/rubies/jruby-9.2.8.0/lib/ruby/stdlib/mkmf.rb:997
checking_for at /home/ubuntu/.rvm/rubies/jruby-9.2.8.0/lib/ruby/stdlib/mkmf.rb:942
postpone at /home/ubuntu/.rvm/rubies/jruby-9.2.8.0/lib/ruby/stdlib/mkmf.rb:350
open at /home/ubuntu/.rvm/rubies/jruby-9.2.8.0/lib/ruby/stdlib/mkmf.rb:320
postpone at /home/ubuntu/.rvm/rubies/jruby-9.2.8.0/lib/ruby/stdlib/mkmf.rb:350
open at /home/ubuntu/.rvm/rubies/jruby-9.2.8.0/lib/ruby/stdlib/mkmf.rb:320
postpone at /home/ubuntu/.rvm/rubies/jruby-9.2.8.0/lib/ruby/stdlib/mkmf.rb:346
checking_for at /home/ubuntu/.rvm/rubies/jruby-9.2.8.0/lib/ruby/stdlib/mkmf.rb:941
have_library at /home/ubuntu/.rvm/rubies/jruby-9.2.8.0/lib/ruby/stdlib/mkmf.rb:992
<main> at extconf.rb:137
*** 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/jruby-9.2.8.0/bin/jruby
--with-sha1dc
--without-sha1dc
--use-system-libraries
--with-git2-dir
--without-git2-dir
--with-git2-include
--without-git2-include=${git2-dir}/include
--with-git2-lib
--without-git2-lib=${git2-dir}/lib
--with-git2lib
--without-git2lib
我尝试了不同的方法来让它工作,但它们都失败了,并出现了相同的错误:
- 独立运行
gem install rugged
。
- 克隆
rugged
git 存储库并手动构建代码。
- 手动构建
libgit2
,然后构建rugged
存储库。
请告诉我是否存在此问题的解决方案,或者是否有其他方法来处理以下 pronto 命令:PRONTO_GITHUB_ACCESS_TOKEN=<access_token> pronto run -c origin/master -f github_pr_review
我最初的问题是我想使用 CI 在我的拉取请求上运行 rubocop 1.17 版。 rubocop 应该只在拉取请求中存在的更改的 ruby 代码行上运行,而不是在整个文件上运行。
解决方法
JRuby 似乎不支持 C 扩展/库。所以我必须安装 ruby-2.5,然后手动安装 gems。以下是我所做的步骤:
-
rvm install ruby-2.5.8
-
rvm use ruby-2.5.8
-
gem install rubocop -v 1.17.0
-
gem install pronto -v 0.11.0
-
gem install pronto-rubocop -v 0.11.1
现在我可以成功执行 pronto 命令了。遗憾的是,不能在这个文件上使用 bundle install
,因为我的 Gemfile 有 JRuby 依赖的 gem。