config.gem en environment.rb
-
06-07-2019 - |
Pregunta
Digamos que en una aplicación de Rails tienes algunas gemas que usas en tu aplicación (las llamaremos " gemas primarias ") y has vendido ellos para la portabilidad.
Digamos que esas " gemas primarias " también requieren gemas propias: las llamaremos " gemas secundarias " ;.
Cuando está configurando su environment.rb, tiene que decir:
config.gem 'primary-gem'
para cualquiera de las gemas que está utilizando directamente.
Pero, ¿también necesitas decirlo? . .
config.gem 'secondary-gem'
incluso si no está utilizando esa gema explícitamente en su aplicación?
¿O es simplemente suficiente incluir la gema en su directorio vendor/gems
para que su aplicación la recoja?
Solución
En el momento del despliegue, rails conoce sus dependencias, por lo que si desea congelar sus gemas, puede ejecutar
rake gems:unpack:dependencies
para congelarlos en el directorio de proveedores.
Sin embargo, en tiempo de ejecución es el trabajo de gemas cargar sus dependencias, y generalmente las gemas hacen esto, por lo que un config.gem 'primario' debería funcionar.
Otros consejos
No, no lo haces o al menos no deberías. Cada especificación GEM debe incluir su propia lista de dependencias. Cuando se instala la gema primaria, RubyGems instalará automáticamente cada dependencia de gema en cascada.
En otras palabras, si A requiere B que requiere C + D, solo necesita escribir
config.gem 'A'
Cuando el comando
gem install A
se ejecuta, RubyGems resolverá todas las dependencias y las instalará. Puede ver todas las dependencias A en ejecución (desde un proyecto Rails)
rake gems
A veces, un autor de GEM puede olvidar incluir algunas dependencias de GEM en la especificación. En este caso, debe especificarlos en su environment.rb para forzar a la aplicación a instalarlos. Por supuesto, también es una buena idea ponerse en contacto con el responsable de mantenimiento de GEM para que pueda solucionar el problema.