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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top