2011-05-26 20 views
10

Uso de los carriles 3, estoy tratando de averiguar lo que creo que debe ser bastante sencillo ...2 gemas necesitar diferentes versiones de la misma dependencia

tengo 2 gemas que requieren 2 versiones diferentes de la misma gema dependencia. Ambas versiones de la gema dependiente están instaladas en mi sistema, pero sigo recibiendo un error de Rails: "Bundler no pudo encontrar versiones compatibles para la gema XXX".

¿Cuál es la mejor práctica para manejar un escenario como este?

+0

¿Qué gemas son conflictivas? – BaroqueBobcat

+0

Gema de Twitter (requiere faraday 0.6.1) Gema de Groupon2 (requiere faraday 0.5.7). – ericalli

Respuesta

7

Iré por lo que sugiere @BaroqueBobcat. Solo quiero añadir que, si necesitas la última joya de Twitter y no puedes esperar a que el mantenedor de Groupon2 actualice su joya, puedes bifurcar Groupon2 en GitHub, actualizar su gemspec, ver si todavía funciona ejecutando sus pruebas (y trate de arreglarlo si no es así) e incluya su propia versión usando su URL de Git en su Gemfile como lo siguiente: gem "groupon2",: git => "https://github.com/yourgithubuser/groupon2.git ".

Si quieres ser agradable puede ofrecer a sus cambios en el mantenedor de Groupon2 con una solicitud de extracción de puntos de bonificación :)

+0

No tiene que bifurcarlo en Github: puede clonarlo localmente y especificar la ruta en Gemfile. – Nakilon

3

Si no necesita todas las características de la versión de gema de Twitter 1.4.1, puede usar la versión 1.2.0, que necesita faraday ~> 0.5.4. y eso debería funcionar Si eso no funciona, puede intentar presionando al propietario de groupon2 para actualizar su gema - está en github https://github.com/gangster/groupon2 .

-1

Tome un vistazo a esta solución, tal vez le ayudará a: gems

+0

La respuesta vinculada es sobre grupos de gemas; no es información útil para resolver conflictos de dependencia. – James

0

Si se encuentra en una situación en la que las gemas se utilizan en diferentes proyectos o al menos no al mismo tiempo, puede usar la función gemset de RVM como solución alternativa. Recientemente tuve una incompatibilidad de gemas similar a la tuya y eso es lo que usé.

Si ha instalado RVM, hacer esto:

rvm gemset create gemset_name_here 
rvm gemset use gemset_name_here 

Así que lo que estás haciendo es crear un entorno joya que es totalmente fresco y desde cero sin dejar de ser capaz de volver a las gemas que estaba trabajando con antes en cualquier momento. La primera línea crea un nuevo gemset y la segunda línea le dice a RVM que empiece a usarlo.

En este punto necesitarás ejecutar bundle install o rastrillar o lo que sea que estés usando para obtener las gemas que necesitas, pero esto debería solucionar el problema.

De modo que cuando usa gema 1 con dependencia 1, usa el gemset que tiene la versión requerida. Luego, cuando utilizas la gema 2 con la dependencia 2, cambias al gemset que tiene eso.

Ahora, si ambas gemas son parte de un proyecto más grande, esto no será factible y lo más probable es que necesite editar el origen de la gema para ejecutar la nueva versión de la dependencia como dijo @BaroqueBobcat. En muchos casos, esto es bastante fácil. Los desarrolladores de Ruby tienden a ser muy geniales para hacer que su código sea fácil de entender.

-1

bundle update resolver conflictos

+0

'actualización de paquete' respeta las dependencias, por lo que no resolverá ningún conflicto. –

1

que estaba teniendo el mismo problema, pero en un contexto diferente: Escribir una aplicación que utiliza dos versiones diferentes de la dependencia hashie (1.2.0 y 3.1.0)

I entró en Gemfile.lock y especificó la versión anterior entre paréntesis hashie (1.2.0), ejecutó bundle install y funcionó.

Cuestiones relacionadas