¿Cuál es la mejor manera de desinstalar gemas de un proyecto rails3?


Instalé todas mis gemas usando bundler a través del Gemfile. Pensé (erróneamente) que si eliminaba una gema de mi Gemfile y ejecutaba 'bundle install', las gemas eliminadas se desinstalarían. He mirado el archivo de ayuda de bundler y, por lo que puedo decir, no tiene una manera de desinstalar gemas.

¿Solo uso gem uninstall x para todo? ¿Esto va a confundir a Bundler?

Author: lashleigh, 2011-01-12

6 answers

Bundler se inicia desde el directorio raíz de su aplicación, por lo que se asegura de que todas las gemas necesarias estén presentes para que su aplicación funcione.Si por alguna razón ya no necesitas una gema tendrás que ejecutar el

    gem uninstall gem_name 

Como usted dijo above.So cada vez que ejecute bundler, volverá a comprobar las dependencias

EDITAR-24.12.2014

Veo que la gente sigue llegando a esta pregunta, decidí agregar un poco. La respuesta que di fue para el caso cuando mantengas tus gemas globales. Considerar usar un gestor de gemas como rbenv o rvm para mantener conjuntos de gemas con el alcance de proyectos específicos.

Esto significa que no se instalarán gemas a nivel global y, por lo tanto, cuando elimine una del Gemfile de su proyecto y vuelva a ejecutar el paquete, obviamente, no se cargará en su proyecto. Luego, puede ejecutar bundle clean (con el directorio del proyecto) y eliminará del sistema todas aquellas gemas que una vez se instalaron desde su Gemfile (en el mismo directorio) pero que en este momento ya no están está en la lista.... larga historia corta-elimina gemas no utilizadas.

 131
Author: Daniel,
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
2014-12-24 09:13:53

Esto desinstalará una gema instalada por bundler:

bundle exec gem uninstall GEM_NAME

Tenga en cuenta que esto arroja

ERROR: Al ejecutar gem ... (NoMethodError) undefined method 'delete' for # <:>

Pero la gema en realidad se elimina. La próxima vez que ejecute bundle install la gema se reinstalará.

 95
Author: phatmann,
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-02 22:03:12

Con las versiones más recientes de bundler puede utilizar la tarea limpia:

$ bundle help clean
Usage:
    bundle clean

Options:
    [--dry-run=only print out changes, do not actually clean gems]
    [--force=forces clean even if --path is not set]
    [--no-color=Disable colorization in output]
    -V, [--verbose=Enable verbose output mode]

Cleans up unused gems in your bundler directory
$ bundle clean --dry-run --force
Would have removed actionmailer (3.1.12)
Would have removed actionmailer (3.2.0.rc2)
Would have removed actionpack (3.1.12)
Would have removed actionpack (3.2.0.rc2)
Would have removed activemodel (3.1.12)
...

Editar:

Esto no se recomienda si está utilizando un conjunto de gemas global (es decir, todos sus proyectos mantienen sus gemas en el mismo lugar). Sin embargo, hay pocas maneras de mantener las gemas de cada proyecto separadas:

  1. rvm conjuntos de gemas ( http://rvm.io/gemsets/basics )
  2. bundle install con cualquiera de las siguientes opciones: --deployment o --path=<path> ( http://bundler.io/v1.3/man/bundle-install.1.html )
 21
Author: Evgenia Manolova,
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
2014-05-23 13:01:14

Debe usar 'gem uninstall gem_name' para desinstalar una gema.

Tenga en cuenta que si instaló la gema en todo el sistema (es decir. sudo bundle install) entonces es posible que necesite especificar el directorio binario usando la opción-n, para asegurarse de que los binarios que pertenecen a la gema se eliminen. Por ejemplo

sudo gem uninstall gem_name  -n /usr/lib/ruby/gems/1.9.1/bin
 1
Author: Declan McGrath,
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
2012-01-06 15:42:29

Parecía resolver esto eliminando manualmente la gema unicornio a través de bundler ("sudo bundler exec gem uninstall unicorn"), luego rebundling ("sudo bundle install").

No estoy seguro de por qué sucedió, aunque la corrección anterior parece funcionar.

 1
Author: Aaron Marks,
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
2014-02-03 10:08:08

Si quieres limpiar todas tus gemas y empezar de nuevo

sudo gem clean
 1
Author: Douglas G. Allen,
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-01-08 09:13:41