¿Cómo especifico archivos .gem locales en mi Gemfile?
158
Tengo un par de archivos gem que instalo a través de gem install xx.gem. ¿Puedo decirle a Bundler que los use? ¿O tengo que especificar la ruta de origen?
Esta no es estrictamente una respuesta a su pregunta sobre la instalación de .gempaquetes, pero puede especificar todo tipo de ubicaciones gema por gema editando su Gemfile .
Especificar un :pathatributo instalará la gema desde esa ruta en su máquina local.
gem "foreman", path:"/Users/pje/my_foreman_fork"
Alternativamente, al especificar un :gitatributo se instalará la gema desde un repositorio de git remoto.
gem "foreman", git:"git://github.com/pje/foreman.git"# ...or at a specific SHA-1 ref
gem "foreman", git:"git://github.com/pje/foreman.git", ref:"bf648a070c"# ...or branch
gem "foreman", git:"git://github.com/pje/foreman.git", branch:"jruby"# ...or tag
gem "foreman", git:"git://github.com/pje/foreman.git", tag:"v0.45.0"
También para algunos firewalls, el protocolo git puede ser un problema. En tal caso, intentegem "foreman", :git => "https://github.com/pje/foreman.git"
kode
61
Parece que el paquete no puede usar archivos .gem listos para usar. Señalar la ruta: a un directorio que contiene archivos .gem no funciona. Algunas personas sugirieron configurar un servidor de gemas local (geminabox, stickler) para ese propósito.
Sin embargo, lo que encontré que es mucho más simple es usar un "servidor" de gemas local del sistema de archivos: simplemente coloque sus archivos .gem en un directorio local, luego use "gem generate_index" para convertirlo en un repositorio de gemas
¡Gracias! Además, necesitaba una tercera barra para hacer "file: /// Absolute / Path / to / repo"
Anna
55
¿No sería más fácil ejecutar el "servidor de gemas" en la línea de comando y agregar la fuente " localhost: 8808 " a su Gemfile
Anna
¡Esto es realmente genial Martin! Gracias por compartir, es exactamente lo que estaba buscando, ya que no quería depender de ejecutar un gem serverservidor ni quería alojar todo el proyecto, solo el archivo .gem.
Leo Gallucci
66
Consejo adicional: puede sortear el requisito de ruta absoluta utilizando File.expand_path de esta manerasource "file://#{File.expand_path('.')}/chef-11.10.0.dev.2"
Leo Gallucci
No funciona para mi Mac OS X. Bundler v1.11.2:Could not fetch specs from file://Users/nakilon/....../
Nakilon
44
Descomprimiría su gema en la carpeta del proveedor de la aplicación
Cierto. pero ¿qué pasa si no lo he instalado antes? (cuando estoy implementando en un servidor) No pude encontrar Imlib2-Ruby-0.5.2 en ninguno de los comandos de fuentes terminados
ddayan
184
puede apuntar a un directorio local con gema "gemname",: path => "~ / some / local / path"
JHurrah
55
Creo que: la ruta requiere la carpeta de gemas con el archivo gemspec. Solo tengo archivos .gem que deseo instalar.
ddayan
1
Ok, así que la implementación de la tapa pasó, pero la gema no se instaló "No hay tal archivo para cargar - vips": /
ddayan
44
Eso definitivamente no es cierto, al menos por más tiempo. Bundler no mira las gemas de su sistema, y solo pasa por lo que está en el Gemfile. Una de las razones es tan terrible.
bioneuralnet
6
Puede forzar a bundler a usar las gemas que implemente usando "bundle package" y "bundle install --local"
En su máquina de desarrollo:
bundle install
(Instala las gemas necesarias y crea Gemfile.lock)
bundle package
(Almacena en caché las gemas en proveedor / caché)
En el servidor:
bundle install --local
(--local significa "usar las gemas del vendedor / caché")
¿Qué pasa si no puedo instalar nada en el servidor? En este caso, necesito construir con rake pero el servidor no tiene una gema que uso para construir; pero no tengo problemas para registrar las dependencias.
Henrik
"paquete de instalación" no funcionó para mí si la gema no estaba incluida en mi fuente "Gemfile" existente.
Anna
Simplemente elimine el archivo de gemas de forma temporal antes de hacerlo bundle installDespués de eso, copie el archivo de gemas al proveedor / caché , agregue la gema de nuevo al archivo de gemas y ejecute bundle install --local
bert bruynooghe
1
bundle packageEs una gran sugerencia, incluso ahora, tres años después. Si su versión de Bundler es anterior a la 2.0 (aún no publicada en este escrito), deberá usarla bundle package --allsi desea incluir gemas patho gitdependencias. Sin embargo, le dará un recordatorio útil si detecta tales dependencias.
L2G
1
FYI: esto puede no funcionar tan bien como esperaría si desarrolla en una plataforma diferente a la que implementa (por ejemplo, desarrolle en macOS, implemente en Linux). Según los --localdocumentos: "Tenga en cuenta que si existe una gema específica de plataforma apropiada en rubygems.org, no se encontrará".
Liam Dawson
1
Agregar .gema vendor/cacheparece funcionar. No se requieren opciones en Gemfile.
Respuestas:
Esta no es estrictamente una respuesta a su pregunta sobre la instalación de
.gem
paquetes, pero puede especificar todo tipo de ubicaciones gema por gema editando su Gemfile .Especificar un
:path
atributo instalará la gema desde esa ruta en su máquina local.Alternativamente, al especificar un
:git
atributo se instalará la gema desde un repositorio de git remoto.(Como @JHurrah mencionó en su comentario ).
fuente
gem "foreman", :git => "https://github.com/pje/foreman.git"
Parece que el paquete no puede usar archivos .gem listos para usar. Señalar la ruta: a un directorio que contiene archivos .gem no funciona. Algunas personas sugirieron configurar un servidor de gemas local (geminabox, stickler) para ese propósito.
Sin embargo, lo que encontré que es mucho más simple es usar un "servidor" de gemas local del sistema de archivos: simplemente coloque sus archivos .gem en un directorio local, luego use "gem generate_index" para convertirlo en un repositorio de gemas
Finalmente apunte a esta ubicación agregando la siguiente línea a su Gemfile
Si actualiza las gemas en el repositorio, asegúrese de regenerar el índice.
fuente
gem server
servidor ni quería alojar todo el proyecto, solo el archivo .gem.source "file://#{File.expand_path('.')}/chef-11.10.0.dev.2"
Could not fetch specs from file://Users/nakilon/....../
Descomprimiría su gema en la carpeta del proveedor de la aplicación
Luego agregue la ruta en el Gemfile para vincular la gema desempaquetada.
fuente
Por defecto, Bundler verificará su sistema primero y si no puede encontrar una gema, usará las fuentes especificadas en su Gemfile.
fuente
Puede forzar a bundler a usar las gemas que implemente usando "bundle package" y "bundle install --local"
En su máquina de desarrollo:
(Instala las gemas necesarias y crea Gemfile.lock)
(Almacena en caché las gemas en proveedor / caché)
En el servidor:
(--local significa "usar las gemas del vendedor / caché")
fuente
bundle install
Después de eso, copie el archivo de gemas al proveedor / caché , agregue la gema de nuevo al archivo de gemas y ejecutebundle install --local
bundle package
Es una gran sugerencia, incluso ahora, tres años después. Si su versión de Bundler es anterior a la 2.0 (aún no publicada en este escrito), deberá usarlabundle package --all
si desea incluir gemaspath
ogit
dependencias. Sin embargo, le dará un recordatorio útil si detecta tales dependencias.--local
documentos: "Tenga en cuenta que si existe una gema específica de plataforma apropiada en rubygems.org, no se encontrará".Agregar
.gem
avendor/cache
parece funcionar. No se requieren opciones enGemfile
.fuente
Me resultó más fácil ejecutar mi propio servidor de gemas usando
geminabox
Vea estas simples instrucciones .
fuente