Error al ejecutar el ejecutable desde la gema porque otra gema no forma parte del paquete
Pregunta
Estoy creando una joya (ver https://github.com/hamchapman/rewinder) que tiene ruby-git (https://github.com/schacon/ruby-git) como dependencia.
Parte de mi gema tiene un ejecutable. https://github.com/hamchapman/rewinder/blob/master/bin/rewinder
que básicamente solo requiere el archivo lib principal https://github.com/hamchapman/rewinder/blob/master/lib/rewinder.rb
y luego ejecuta el método allí (todo confuso en este momento; ignórelo por ahora).
Cuando instalo la gema localmente y la uso en otro repositorio, aparece el siguiente error:
/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>'
Realmente no entiendo el error ya que ni mi gema ni la gema Ruby-git tienen hookup
como dependencia.Si cargo el archivo /Users/Hami/.rvm/gems/ruby-2.1.2/bin/hookup
luego comenta las dos líneas inferiores como esta:
#!/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)
entonces el error no ocurre.
Por lo que he leído, parece que podría tener algo que ver con la forma en que oh-my-zsh envuelve ciertos comandos; ¿tal vez esté envolviendo uno de git?
¿Alguna sugerencia?
Solución
Desde el documentación de conexión:
Cada vez que su HEAD actual cambia, la conexión verifica si su
Gemfile
,Gemfile.lock
, o la especificación de la gema ha cambiado.Si es así, ejecuta la verificación del paquete y, si eso indica que alguna dependencia no está satisfecha, ejecuta la instalación del paquete.
De esto deduzco que la gema escucha git checkout
eventos.Dado que haces eso en tu código, los enlaces de conexión cobran vida y se confunden (independientemente de si es parte de tu aplicación Ruby o no).
Intente desinstalar la gema y vuelva a intentarlo.
Si esto resuelve su problema, podría considerar abrir un problema al autor de la gema para solucionarlo.