Gem安装调试器错误

apa*_*des 25 ruby gem ruby-on-rails rvm

我在Mac OS 10.9.2上运行Rails v4.0.2并且我顺利完成了一切.我突然发现一个错误,当我尝试时,宝石丢失了rails server.我运行bundle install,这是输出:

Fetching gem metadata from https://rubygems.org/.......
Fetching additional metadata from https://rubygems.org/..
Using rake 10.1.1
Using i18n 0.6.9
Using minitest 4.7.5
Using multi_json 1.9.0
Using atomic 1.1.16
Using thread_safe 0.2.0
Using tzinfo 0.3.39
Using activesupport 4.0.2
Using builder 3.1.4
Using erubis 2.7.0
Using rack 1.5.2
Using rack-test 0.6.2
Using actionpack 4.0.2
Using mime-types 1.25.1
Using polyglot 0.3.4
Using treetop 1.4.15
Using mail 2.5.4
Using actionmailer 4.0.2
Using activemodel 4.0.2
Using activerecord-deprecated_finders 1.0.3
Using arel 4.0.2
Using activerecord 4.0.2
Using encryptor 1.3.0
Using attr_encrypted 1.3.2
Using awesome_print 1.2.0
Using bcrypt 3.1.7
Using bcrypt-ruby 3.1.5
Using net-ssh 2.8.0
Using net-scp 1.1.2
Using tins 1.0.0
Using term-ansicolor 1.3.0
Using sshkit 1.3.0
Using capistrano 3.1.0
Using capistrano-bundler 1.1.2
Using capistrano-rails 1.1.1
Using climate_control 0.0.3
Using cocaine 0.5.3
Using coderay 1.1.0
Using coffee-script-source 1.7.0
Using execjs 2.0.2
Using coffee-script 2.2.0
Using thor 0.18.1
Using railties 4.0.2
Using coffee-rails 4.0.1
Using columnize 0.3.6
Using currencies 0.4.2
Using countries 0.9.3
Using debugger-linecache 1.2.0
Using debugger-ruby_core_source 1.3.2

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /Users/aaronpardes/.rvm/rubies/ruby-2.1.2/bin/ruby extconf.rb 
*** 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=/Users/aaronpardes/.rvm/rubies/ruby-2.1.2/bin/ruby
/Users/aaronpardes/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/fileutils.rb:1573:in `stat': No such file or directory @ rb_file_s_stat - ./212/ruby_debug.h (Errno::ENOENT)
    from /Users/aaronpardes/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/fileutils.rb:1573:in `block in fu_each_src_dest'
    from /Users/aaronpardes/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/fileutils.rb:1587:in `fu_each_src_dest0'
    from /Users/aaronpardes/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/fileutils.rb:1571:in `fu_each_src_dest'
    from /Users/aaronpardes/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/fileutils.rb:399:in `cp'
    from extconf.rb:83:in `block in <main>'
    from extconf.rb:82:in `each'
    from extconf.rb:82:in `<main>'

extconf failed, exit code 1

Gem files will remain installed in /Users/aaronpardes/.rvm/gems/ruby-2.1.2@ocx/gems/debugger-1.6.6 for inspection.
Results logged to /Users/aaronpardes/.rvm/gems/ruby-2.1.2@ocx/extensions/x86_64-darwin-13/2.1.0-static/debugger-1.6.6/gem_make.out
An error occurred while installing debugger (1.6.6), and Bundler cannot continue.
Make sure that `gem install debugger -v '1.6.6'` succeeds before bundling.
Run Code Online (Sandbox Code Playgroud)

当我尝试运行时,gem install debugger -v '1.6.6'我得到以下输出:

Building native extensions.  This could take a while...
ERROR:  Error installing debugger:
    ERROR: Failed to build gem native extension.

    /Users/aaronpardes/.rvm/rubies/ruby-2.1.2/bin/ruby extconf.rb
*** 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=/Users/aaronpardes/.rvm/rubies/ruby-2.1.2/bin/ruby
/Users/aaronpardes/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/fileutils.rb:1573:in `stat': No such file or directory @ rb_file_s_stat - ./212/ruby_debug.h (Errno::ENOENT)
    from /Users/aaronpardes/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/fileutils.rb:1573:in `block in fu_each_src_dest'
    from /Users/aaronpardes/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/fileutils.rb:1587:in `fu_each_src_dest0'
    from /Users/aaronpardes/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/fileutils.rb:1571:in `fu_each_src_dest'
    from /Users/aaronpardes/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/fileutils.rb:399:in `cp'
    from extconf.rb:83:in `block in <main>'
    from extconf.rb:82:in `each'
    from extconf.rb:82:in `<main>'

extconf failed, exit code 1

Gem files will remain installed in /Users/aaronpardes/.rvm/gems/ruby-2.1.2@ocx/gems/debugger-1.6.6 for inspection.
Results logged to /Users/aaronpardes/.rvm/gems/ruby-2.1.2@ocx/extensions/x86_64-darwin-13/2.1.0-static/debugger-1.6.6/gem_make.out
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么这个错误突然出现了.几个星期以来,我一直没有问题.我尝试用rvm创建一个新的gemset,但仍然遇到同样的问题.在搜索之后,我找到了首先更新依赖关系的建议,然后尝试bundle install但这并没有解决问题.

nic*_*ckh 29

遗憾的是,调试器不支持Ruby 2.1.2.相反,使用byebug gem.有关详细信息,请参阅此讨论.


Mar*_*ery 25

调试器 gem 不支持Ruby 2.x ,您应该使用byebug.一旦Rails 4.2.0发布(或者你使用Rails 4.2.0rc版本),byebug将是Gemfile中包含的默认调试器,但是如果你使用的是早期版本的Rails,那么你需要进行更改在您的Gemfile中手动.

只需更换

gem "debugger"
Run Code Online (Sandbox Code Playgroud)

gem "byebug"
Run Code Online (Sandbox Code Playgroud)

在你的Gemfile中运行一个bundle install.

更多背景

即使是调试器 gem 的维护者也提出了这个建议.GitHub上的调试器 gem的README有以下注释:

  • 仅支持1.9.2和1.9.3.对于2.X红宝石,请考虑使用byebug.

维护者无意修复此问题; 他关闭了问题调试器无法安装在ruby 2.X上不固定,解释调试器从未正确支持Ruby 2.X并且他现在推荐byebug.

此外,调试器的维护者自2014年6月以来没有推送提交甚至回复拉取请求.此时宝石似乎是放弃软件.

Rails本身已采用byebug作为Ruby 2.X的官方调试器,从4月份的pull请求开始,从Rails 4.2.0开始,运行时创建的Gemfile rails new my_new_app_name将引用byebug而不是debuggerRuby 2.X用户.

TL;博士

调试器已经死了.使用byebug.


and*_*otn 13

这个命令的怪异最终为我做了诀窍:

gem install debugger-ruby_core_source && ARCHFLAGS="-I$(dirname -- "$(gem which debugger/ruby_core_source/ruby-$(ruby -v | awk '{sub(/p/, "-p", $2); print $2}')/vm_core.h)") -include vm_core.h" bundle install
Run Code Online (Sandbox Code Playgroud)

我很抱歉.

打破它:

  • 首先,安装Ruby头文件.

    gem install debugger-ruby_core_source
    
    Run Code Online (Sandbox Code Playgroud)
  • 现在,如果成功,我们想要运行,bundle install但它需要能够找到那些Ruby头.在输出中gem contents debugger-rebuy_core_source,我们发现它为不同的Ruby 补丁级别安装了一堆不同的头文件:

    $ gem contents debugger-ruby_core_source | grep vm_core.h
    /Users/andrew/.gem/ruby/2.0.0/gems/debugger-ruby_core_source-1.3.2/lib/debugger/ruby_core_source/ruby-1.9.2-p290/vm_core.h
    /Users/andrew/.gem/ruby/2.0.0/gems/debugger-ruby_core_source-1.3.2/lib/debugger/ruby_core_source/ruby-1.9.2-p318/vm_core.h
    /Users/andrew/.gem/ruby/2.0.0/gems/debugger-ruby_core_source-1.3.2/lib/debugger/ruby_core_source/ruby-1.9.2-p320/vm_core.h
    ...
    
    Run Code Online (Sandbox Code Playgroud)
  • 目前的补丁级别是多少?

    $ ruby -v
    ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin14]
    
    Run Code Online (Sandbox Code Playgroud)

    要将其转换为gem使用的ruby-2.0.0-p318格式debugger-ruby_core_source,我们使用awk仅打印该版本字符串的第二个字段,并将其更改p-p:

    $ ruby -v | awk '{sub(/p/, "-p", $2); print $2}'
    2.0.0-p481
    
    Run Code Online (Sandbox Code Playgroud)
  • 现在我们运行bundle install,使用ARCHFLAGSset将包含ruby标头的目录添加到包含文件搜索路径,并预加载vm_core.h:

    gem install debugger-ruby_core_source \
      && ARCHFLAGS="-I$(dirname -- \
        "$(gem which debugger/ruby_core_source/ruby-$(ruby -v | awk '{sub(/p/, "-p", $2); print $2}')/vm_core.h)") \
        -include vm_core.h" \
    bundle install
    
    Run Code Online (Sandbox Code Playgroud)

    gem install debugger-ruby_core_source \
      && ARCHFLAGS="-I<path-to-dir_containing_vm_core.h> -include vm_core.h" \
        bundle install
    
    Run Code Online (Sandbox Code Playgroud)


val*_*alk 6

对于那些正在使用的人,gem 'pry-debugger'只需将其改为gem 'pry-byebug'你的Gemfile.