Bundler no está instalando gem privada de git repo

Tengo problemas para crear una gem privada, llevarla a un repository privado de git y luego usarla en mi Gemfile través de :git una reference de :git .

El problema es que el bundler (sin dar error) no parece instalar la gem para mí.

Descubrí que puedo demostrar esto con cualquier gem, no solo con la mía. Así que voy a demostrarlo usando la gem "colorear" ya que ya está en github y rubygems, y es una gem simple que no tiene dependencies. Aquí está mi file test.rb que usa la gem:

 require 'colorize' puts 'some blue text'.colorize(:blue) 

CASO UNO (esto funciona):

El Gemfile es el siguiente:

 source 'https://rubygems.org' gem 'colorize' 

Bundle funciona felizmente, y ruby test.rb genera el text azul sin problemas.

Luego ejecuto gem uninstall colorize para limpiar antes de la próxima testing.

CASO DOS (falla):

Ahora, cambio el Gemfile a esto:

 #source 'https://rubygems.org' gem 'colorize', :git => 'git@github.com:fazibear/colorize.git' 

Tenga en count que comenté la línea rubygems.org para asegurarme de que no obtuve accidentalmente la gem de rubygems.

Bundle nuevamente funciona bien, y se puede ver para get la gem del repository. Hasta aquí todo bien. Pero ahora, ruby test.rb falla: require cannot load 'colorize' . Parece que la gem no se instaló, y de hecho si ejecuto gem uninstall colorize para limpiar, ¡dice que colorize no está instalado!

Entonces, ¿qué estoy haciendo mal aquí, o no estoy entendiendo? Quiero tener la gem instalada de un git repo, no rubygems, ya que la gem es una joya privada.

Gracias, – Glenn

Me parece que su connection ssh a github no está configurada correctamente.

Intente hacer un ssh -T git@github.com como se sugiere aquí en github , esto le dará un error si las cosas están mal configuradas. Siga los pasos mencionados en el enlace y luego vuelva a verificar, las cosas deberían funcionar bien. FWIW, lo intenté y pude instalar la gem de esta manera.

Si estaba instalando esta joya en un server, ejecute este command en el server mismo.

Una alternativa para superar esto (la limitación de configurar las keys ssh para cada count para usar git@github.com url en :git ) es usar una URL https en su lugar (Mira este hilo ); esto sin embargo supera el propósito de usar keys ssh.

Por supuesto, la gem no está instalada en el segundo caso, eso es correcto, ya que fue eliminada. Pero cuando bundler clona un git repo, o utiliza una key de ruta para crear una gem, no usa la utilidad gem de ruby, y para saber si la gem está instalada con éxito, solo tiene que ejecutarla, y para ver la ruta de la gem. gem instalada:

 $ bundle show colorize /home/user/.rvm/gems/ruby-~.~.~@irb/gems/colorize-~.~.~ 

Si la joya no está instalada correctamente, verás:

 Could not find gem 'colorize'. 

Y tendrá que emitir la bundle install nuevamente, y capturar errores si los hubiera.

Como el bundler no llama al command gem , no coloca las gems extraídas de los repositorys de git o GitHub en extracción de gems común, y en lugar de crear la gem en sí misma dentro de su extracción, y la controla. Debería ejecutar su script usando el bundler en sí mismo:

 $ bundle exec ./test.rb 

o

 $ bundle exec ruby test.rb