Implementa una gem Ruby local sin usar git o acceso a internet

¿Hay alguna forma de distribuir una gem de Ruby sin acceso a Internet, simplemente agrupando las gems que están instaladas en la PC del desarrollador?

Esto es para implementar dentro de nuestra organización, el acceso a internet está muy restringido. Todas las computadoras ejecutan Windows7 con Ruby1.9.3 y Bundler 1.11.2

Tengo poca experiencia con git o bundler. No se usa Rails, pero sí algunas gems como activerecord y logger.

Lo que probé: Creé una carpeta con mi rb. scripts y un file .gemspec con las gems requeridas, luego Errno::ENOENT: No such file or directory - git config user.name bundle gem name_of_the_gem_i_want_to_make pero obtuve un error Errno::ENOENT: No such file or directory - git config user.name . En el pasado, creé una count git e hice algunos experimentos, prefiero no usarla.

En el pasado, experimenté con jRuby y Warble para producir JAR, pero en este caso me gustaría seguir con MRI Ruby.

Tengo connection a Internet en mi pc de desarrollo, pero algunos de los equipos o serveres quiero implementar los scripts, y más importante, las gems de las que dependen, no. Ruby ya está instalado en todas partes.

Me gustaría una forma simple de recostackr todos los files necesarios de mi PC dev y transferirlos a la pc de destino. Podría comprimir mi carpeta de Ruby y extraerla en otro lugar, pero luego tendré muchos files que no necesito.

¿Puede darme los commands que necesito usar o darme un sitio que explique cómo hacerlo? He leído mucho sobre bundler en línea pero no he encontrado esta manera de trabajar. No puedo imaginarme que otros desarrolladores no tengan los mismos problemas y que haya una solución común.

EDITAR:

gem build mygem.gemspec crear una gem ejecutando gem build mygem.gemspec pero solo tiene mis propios scripts, no se requieren gems.

EDITAR: siguió la sugerencia de Mihai, eliminó los bashs anteriores.

Hizo una subcarpeta de proveedor / gems y copié los 2 gemfiles allí.

Ahora puedo hacer un bundle package y una bundle install --no-deployment con el siguiente Gemfile.

 gem 'active_record', '4.1.1', :path => 'vendor/gems' gem 'logger', '1.2.8', :path => 'vendor/gems' 

Pregunta ahora: ¿cómo implementar esto en otra PC? Copia todo en la carpeta y en la pc de destino bundle install --local un bundle install --local ? ¿O hay una manera de agrupar todo en una gem para que en la PC de destino pueda gem install mygem --local ? Una gem build mygem no incluye nada del package.

Puede hacer esto de dos maneras.

a) Guarde ( empackage ) las gems en la carpeta de vendor/cache su proyecto

 bundle package 

Esto generará / actualizará Gemfile.lock y copyrá todas las gems localmente dentro de la carpeta de vendor/cache su proyecto. Luego puede copyr los files de su proyecto en su server y ejecutar

 bundle install --local # translates to pick my gems from vendor/cache 

b) Use una ruta personalizada, generalmente ubicada fuera de su proyecto

bundle install admite routes locales

 gem install --local path_to_my_gem/my_gem.gem 

El indicador --local es opcional, pero es útil en este caso, ya que omite la búsqueda en los repositorys remotos habituales.

Posteriormente puede especificar la ruta en el Gemfile también

 gem "my_gem", path: "path_to_my_gem/my_gem.gem" 

La solución de Mihai combinada con la carpeta de gems local y la opción –no-deployment funciona en cierto punto, pero hay algunos problemas: – en la PC de destino, primero debe hacer un gem install bundler utilizando una gem local copyda, luego un bundle install --local del package que hizo y copió antes – para las gems ruby-oci8 y activerecord-oracle_enhanced-adapter mi solución para las otras gems no funcionó por alguna razón (algo con la plataforma mingw32)

Dado que el trabajo sobre la creación y la posterior installation del package y los problemas aún descansaban, decidí -por el momento- recurrir al buen enfoque por lotes e hice el siguiente script por lotes.

Esto es solo Windows -obviamente- pero supongo que esto puede ser fácilmente un adaptador para otro sistema operativo.

Las gems se instalan desde las copys locales, no se necesita connection a Internet, las dependencies de activerecord también, no es necesario especificarlas, pero las gems deben estar presentes.

El devkit es necesario para las gems i18n y json, ambas dependencies de activerecord.

Aquí una list de los gemfiles que necesitaba, depende de las versiones que use en su PC dev.

 activemodel-4.1.1.gem activerecord-4.1.1.gem activerecord-oracle_enhanced-adapter-1.5.6.gem activesupport-4.1.1.gem arel-5.0.1.20140414130214.gem builder-3.1.4.gem bundler-1.11.2.gem i18n-0.7.0.gem json-1.8.2.gem logger-1.2.8.gem minitest-5.3.4.gem ruby-oci8-2.1.2-x86-mingw32.gem thread_safe-0.3.4.gem tzinfo-1.2.2.gem 

Puede encontrarlos en C:\Rubyxxx\lib\ruby\gems\1.9.1\cache

Aquí el lote

 @ECHO OFF rem in case started as administrator in folder \windows\system32 pushd "%~dp0" rem check if ruby is installed, if not, start installation if not exist c:\ruby193 ( echo Install Ruby 1.9.3 to c:\ruby193 start /w \\myshare\ruby\rubyinstaller-1.9.3-p551.exe ) rem check if devkit is installed, if not, copy folder local if not exist c:\devkit ( echo Copying devkit.. md c:\devkit xcopy /s \\myshare\devkit c:\devkit ) echo Adding the DevKit to PATH set path=c:\devkit\bin;c:\devkit\mingw\bin;%PATH% rem gems is a folder containing all the gemfiles needed cd gems call gem install logger-1.2.8.gem --no-rdoc --no-ri --local call gem install activerecord-4.1.1.gem --no-rdoc --no-ri --local call gem install ruby-oci8-2.1.2-x86-mingw32.gem --no-rdoc --no-ri --local call gem install activerecord-oracle_enhanced-adapter-1.5.6.gem --no-rdoc --no-ri --local cd .. 

Espero que alguien publique una solución para el enfoque bundler (o mejor) sin embargo.