Dependencia de Ruby Gemspec: ¿Es posible tener una dependencia de rama git?


Es posible tener una dependencia de rama git, dentro de mygem.gemspec?

Estoy pensando algo similar a lo siguiente:

gem.add_runtime_dependency 'oauth2', :git => '[email protected]:lgs/oauth2.git'

... pero no funciona.

Author: Nakilon, 2011-06-28

3 answers

Esto no es posible, y probablemente nunca lo será porque sería bastante pesado para RubyGems permitir que los desarrolladores de gemas requieran que los usuarios tengan instalado un sistema de control de versiones específico para acceder a una gema. Las gemas deben ser independientes con un número mínimo de dependencias para que las personas puedan usarlas en una amplia gama de aplicaciones como sea posible.

Si desea hacer esto para sus propios proyectos internos, mi sugerencia sería utilizar Bundler que soporta esto bastante bien.

 38
Author: gtd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-19 21:44:03

EDITAR

Según un comentarista, esto ya no es cierto. Información previa conservada por contexto histórico.

Duplicar la referencia a una gema en Gemfile and.gemspec ahora parece mostrar un mensaje de advertencia en Bundler, por lo que esta respuesta ya no parece ser cierta.

Información obsoleta

Este artículo de Yehuda Katz aclaró una confusión similar para mí. Dice que, solo para uso en desarrollo, es mejor añade las cosas de git al gemfile, pero ese bundler seguirá usando la información de dependencia/versión del gemspec (me parece mágico, pero confío en Yehuda).

 12
Author: tehgeekmeister,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-07 04:43:10

Yo solo estaba tratando de resolver este problema también. Y acabo de llegar con la siguiente solución (que no estoy seguro de si su publicación de su gema o tienen derechos para redistribuir esa gema oauth2).

En tu gema que requiere gema oauth2 ejecuta esto.

git submodule add [email protected]:lgs/oauth2.git lib/oauth2

Si necesita una rama diferente a la predeterminada

cd lib/oauth2 && git checkout <branchname_or_ref>
cd .. && git add lib/oauth2
git commit -m "adding outh2 submodule"

En tu gemspec añade esto encima de la línea require version

$:.push File.expand_path('../lib/oauth2/lib', __FILE__)

También necesitará agregar todas las dependencias de tiempo de ejecución de la gema oauth2 a tu gemspec. No he encontrado una manera de evitar esto todavía.

Esto es lo que hice, y funciona para nosotros porque nuestra gema se requiere a través de git, así que no estoy seguro de si esto funcionaría para una gema publicada por rubygems.

 6
Author: kwbock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-14 15:25:15