从gem运行可执行文件时出错,因为另一个gem不是该bundle的一部分

时间:2014-07-29 17:06:54

标签: ruby git gem bundler oh-my-zsh

我正在创建一个gem(请参阅https://github.com/hamchapman/rewinder),它将ruby-git(https://github.com/schacon/ruby-git)作为依赖项。

我的部分宝石有一个可执行文件https://github.com/hamchapman/rewinder/blob/master/bin/rewinder

基本上只需要主lib文件https://github.com/hamchapman/rewinder/blob/master/lib/rewinder.rb

然后在那里运行方法(此刻一切都很乱 - 暂时忽略它。)

当我在本地安装gem并在另一个repo中使用它时,我收到以下错误:

/Users/Hami/.rvm/gems/ruby-2.1.2/gems/git-1.2.7/lib/git/lib.rb:764:in `command': git checkout '6eef72baf24bed761f753267cce16402e4a947f8'  2>&1:Note: checking out '6eef72baf24bed761f753267cce16402e4a947f8'. (Git::GitExecuteError)

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 6eef72b... Trying another bg-color change for homeboy
/Users/Hami/.rvm/gems/ruby-2.1.2@global/gems/bundler-1.6.2/lib/bundler/rubygems_integration.rb:252:in `block in replace_gem': hookup is not part of the bundle. Add it to Gemfile. (Gem::LoadError)
    from /Users/Hami/.rvm/gems/ruby-2.1.2/bin/hookup:22:in `<main>'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `eval'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `<main>'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/gems/git-1.2.7/lib/git/lib.rb:528:in `checkout'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/gems/git-1.2.7/lib/git/base.rb:325:in `checkout'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/gems/rewinder-0.0.1/lib/rewinder.rb:11:in `block in heloo'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/gems/rewinder-0.0.1/lib/rewinder.rb:10:in `each'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/gems/rewinder-0.0.1/lib/rewinder.rb:10:in `each_with_index'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/gems/rewinder-0.0.1/lib/rewinder.rb:10:in `heloo'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/gems/rewinder-0.0.1/bin/rewinder:4:in `<top (required)>'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/bin/rewinder:23:in `load'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/bin/rewinder:23:in `<main>'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `eval'
    from /Users/Hami/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `<main>'

我真的不明白错误,因为我的gem和ruby-git gem都没有hookup作为依赖。如果我加载文件/Users/Hami/.rvm/gems/ruby-2.1.2/bin/hookup

然后注释掉这两行:

#!/usr/bin/env ruby_executable_hooks
#
# This file was generated by RubyGems.
#
# The application 'hookup' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0"

if ARGV.first
  str = ARGV.first
  str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
  if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
    version = $1
    ARGV.shift
  end
end

#gem 'hookup', version
#load Gem.bin_path('hookup', 'hookup', version)

然后不会发生错误。

从我所看到的内容看起来它可能与oh-my-zsh如何包装某些命令有关 - 也许它包装了一个git?

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

来自hookup documentation

  

每次当前HEAD更改时,连接都会检查您的GemfileGemfile.lock或gem规格是否已更改。如果是,则运行bundle check,如果这表明任何依赖关系不满足,则运行bundle install。

从此我收集到宝石听取git checkout事件。由于你在代码中这样做,连接挂钩变得生动,并且变得混乱(无论它是否是你的ruby应用程序的一部分)。

尝试卸载gem并重试。

如果这可以解决您的问题,您可以考虑向gem的作者提出问题以解决此问题。