2010-11-09 18 views
11

Me debe estar perdiendo algo porque anoche estaba asombrado de encontrar que Google para check gem dependencies y similares no revelaron la respuesta para esto.¿Cómo verifico si todas las dependencias de mis gemas de Ruby instaladas están satisfechas?

Básicamente estoy después de un equivalente aproximado de rpm -V - un comando que pasará por algunas o todas mis gemas instaladas y asegúrese de que sus dependencias también estén instaladas. Como gem install instala de forma predeterminada gemas dependientes, normalmente esto no es necesario; sin embargo, si gem uninstall es una joya y le dice que proceda con la desinstalación, aunque otras gemas dependen de la que se desinstale, entonces obviamente terminará con dependencias rotas. La pregunta es, ¿cómo enumera esas dependencias rotas sin instalar/desinstalar/actualizar ninguna gema?

N.B. Las respuestas que involucran a Bundler no son de mucha utilidad para mí, ya que todavía estoy atrapado en Rails 2.x por varias razones.

Respuesta

5

Sé que dijo que no estaban interesados ​​en respuestas sobre Bündler, pero ...

Bündler se encargará de la resolución de dependencias joya para usted y es compatible con Rails 2.3. Utilicé Bundler con varias aplicaciones de Rails 2 y no tuve ningún problema.

hay instrucciones para instalar Bündler on Rails 2.3 aquí: http://gembundler.com/rails23.html

+1

Gracias - bueno saberlo. Pero suponiendo que tuviera instalado Bundler, ¿cómo realizaría una comprobación de dependencia en todas mis gemas instaladas? ¿Tendría que crear un Gemfile ficticio que los contenga a todos, y luego ejecutar 'bundle check' o similar? –

+0

No me sugieren usar un Gemfile ficticio, sino que me muevo completamente a Bundler. De esa forma no solo resolverás tu problema actual, sino que también evitarás que este tipo de cosas suceda en el futuro. – georgebrock

+0

Gracias. He echado un vistazo a Bundler y creo que tienes razón. Es una pena que 'gem' no sea compatible con la comprobación de dependencias rotas, pero cambiar mi flujo de trabajo a Bundler significa que ya no debería preocuparme por las dependencias rotas, ya que 'bundle install' asegurará que las dependencias rotas que importen * en el contexto de un proyecto determinado * son fijos. –

3

Ha intentado ejecutar gem update? Eso ejecutará todas las pruebas de dependencia para todas sus gemas. Puede ejecutar esto para instalarlo en un directorio separado.

[edit] Además, ¿qué ocurre cuando ejecuta gem check? gem dependency listará todas las dependencias de gemas. Estoy bastante seguro de que si no te dice si algo está instalado, puedes canalizar la salida a un comando como check para ver si esas gemas están instaladas. [/ editar]

+0

Gracias, pero eso también tendría el efecto secundario no deseado de cambiar las versiones de gemas, lo que podría romper mi aplicación Rails. Estaba específicamente después de un control de solo lectura de las gemas locales: actualizaré la pregunta original para dejar esto en claro. –

+0

cierto.pero puede ejecutar esto para que las actualizaciones no estén instaladas en su carpeta gem. Además, puede probar 'gem obsoleto'. – philosodad

+0

'gem check' no genera nada, pero no pretende verificar las dependencias de todos modos. Del mismo modo, 'gem obsoleta' simplemente informa qué gemas tienen versiones más nuevas disponibles, ignorando de nuevo cualquier dependencia. –

16

en el shell bash:

gem list --no-version > list 
gem dependency --pipe > depends 
grep -v -f list depends > failed.txt 
rm list 
rm depends 

failed.txt tendrá ahora una lista de todas las dependencias que no están instalados.

+0

¡Gracias, eso es muy útil! Aunque creo que todavía falta algunas dependencias insatisfechas, p. si la gema A depende de la versión x de la gema B, pero solo está instalada la versión y de la gema B, no revelará que la dependencia de la gema A está insatisfecha, ya que solo verifica que la gema B esté instalada. –

+0

Si la respuesta es útil, puede considerar votarla. La característica que está buscando solía llamarse 'bloqueo de gemas', pero el comando 'bloqueo' ha quedado en desuso y el grupo rubygem recomienda Bundler. Mi versión anterior de gemas todavía tiene el comando 'lock', es posible que veas si el tuyo también lo hace. – philosodad

+3

Lo votaría si StackOverflow me permitiera :-(Requiere 15 de reputación, lo que parece ridículo considerando que es mi propia pregunta. –

1

Definitivamente estoy de acuerdo con cambiar a Bundler para las aplicaciones. Si está buscando explícitamente una manera de identificar rápidamente las dependencias de gemas insatisfechas para las gemas instaladas en un sistema (como yo), entonces podría probar este script.

https://gist.github.com/1124953

Cuestiones relacionadas