ruby - ver - Cómo reinstalar una gema usando bundler
ver version de rails (7)
Primero hice una gem q --L
, el atajo para gem query --local
. Me da todas las gemas locales instaladas.
actionmailer (3.2.8, 3.2.6, 3.2.1, 3.1.0)
actionpack (3.2.8, 3.2.6, 3.2.1, 3.1.0)
activemodel (3.2.8, 3.2.6, 3.2.1, 3.1.0)
activerecord (3.2.8, 3.2.6, 3.2.1, 3.1.0)
activeresource (3.2.8, 3.2.6, 3.2.1, 3.1.0)
activesupport (3.2.8, 3.2.6, 3.2.1, 3.1.0)
acts-as-taggable-on (2.3.3)
...
Y luego, siguiendo los consejos de DVG, desinstalé la gema utilizando su nombre correcto. gem uninstall acts-as-taggable-on
y ejecuté la bundle install
. Después de eso, pude rails c
o rails s
nuevo sin ningún problema.
Hice un bundle show
y obtuve la ruta completa a un directorio de gemas.
Desafortunadamente, rm -r gem_path
el directorio usando rm -r gem_path
. Entonces mi aplicación de rieles ya no funciona. Si intento iniciar el servidor o iniciar la consola de rails, se genera el siguiente error:
<class:Application>
: constante no inicializadaMyAPP::Application::Gem
(NameError)
¿Qué debo hacer para recuperarlo?
Intenté bundle install
o la bundle update
con la esperanza de forzar al paquete a buscar la gema e instalarla de nuevo, pero no funcionó.
También intenté eliminar Gemfile.lock
y ejecutar bundle install
. Nada cambió, el mismo error.
La gema en cuestión es Actuar como etiquetable .
Si usa RVM con gemas en ~/.rvm/
, esto funciona si el bundle
no está reinstalando una gema.
Primero, elimine la fuente de la gema:
bundle show $GEM
rm -rf $PATH_TO_GEM
Borrar la caché de gemas compiladas:
rm -rf ~/.rvm/gems/ruby-$RUBYVERSION[@$GEMSET]/cache/$GEM.gem
También borre la caché de especificaciones del paquete:
rm -rf ~/.rvm/gems/ruby-$RUBYVERSION[@$GEMSET]/specifications/$GEM*gemspec
Luego puedes volver a instalar:
bundle install
Desde el directorio del proyecto en la terminal
gem uninstall gem_name
Siempre puedes usar:
gem pristine acts-as-taggable-on
pristine - Restaura gemas instaladas a condición prístina de archivos ubicados en el caché de gemas
Si solo quieres restaurar la gema para el proyecto actual, deberías ejecutar:
bundle exec gem pristine acts-as-taggable-on
Si intenta reinstalar el rastrillo, el rastrillo gem pristine rake
fallará con Skipped rake-10.XX, it is a default gem
y el paquete tampoco lo instalará, porque no puede desinstalarlo.
Si está utilizando rvm, parece que lo más fácil es simplemente hacer una rvm reinstall 2.xx
Al menos para mí, la rvm repair all
tampoco me ayudó.
Lo mismo probablemente se aplique a todas las demás gemas predeterminadas. Voy a enumerarlos aquí para que los desesperados googlers encuentren algo de ayuda:
- bigdecimal
- goteo
- io-console
- json
- minitest
- psicoanalizar
- rastrillo
- rbtree
- rdoc
- unidad de prueba
Si usa rbenv, esto le permitirá desinstalar completamente y volver a instalar una gema como rmagick:
Primero: pruebe una desinstalación / reinstalación simple
gem uninstall rmagick
bundle install
Si eso no funciona, puede eliminar todo el rastro de la gema instalada. Encuentra tu ubicación de instalación de gemas:
bundle show rmagick
BUNDLE_DIR=$(dirname $(dirname $(bundle show rmagick)))
echo $BUNDLE_DIR
Su prefijo de instalación de gemas será el predeterminado, por ejemplo, ~/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0
o algo que configure, por ejemplo, .vendor
Borrar el directorio de gemas:
rm -rf $BUNDLE_DIR/gems/rmagick-*
Borrar la caché de gemas compiladas:
rm $BUNDLE_DIR/cache/rmagick*.gem
También borre la caché de especificaciones del paquete:
rm $BUNDLE_DIR/specifications/rmagick*gemspec
Luego puedes volver a instalar:
bundle install
Si ha instalado en ./bundle/vendor
o similar, primero debe eliminar la gema pero especificar explícitamente la GEM_HOME, por ej.
GEM_HOME=./vendor/bundle/ruby/2.3.0/ gem uninstall rmagick
Esta es la forma más simple de desinstalar gemas instaladas usando bundler en un directorio de proveedores. Idealmente, habría una bundle uninstall
comando o una bundle reinstall
, etc.
Si su objetivo es simplemente reinstalar, el siguiente comando ayudará:
GEM_HOME=./vendor/bundle/ruby/2.3.0/ gem uninstall rmagick && sudo -u http bundle install
Si eres como yo y tienes varias aplicaciones web en un directorio (por ejemplo, /srv/http
), lo siguiente lo hago en todos los directorios:
cd /srv/http
for d in ./*/ ; do (cd "$d" && sudo -u http GEM_HOME=./vendor/bundle/ruby/2.4.0/ gem uninstall --force rmagick && sudo -u http bundle install); done