Как переустановить драгоценный камень с помощью связки

Я сделал bundle show и получил полный путь к каталогу gem.

К сожалению, я удалил каталог с помощью rm -r gem_path. Тогда мое приложение rails больше не работает. Если я попытаюсь запустить сервер или запустить консоль рельсов, он выдает следующую ошибку:

<class:Application>: неинициализированная константа MyAPP::Application::Gem (NameError)

Что нужно сделать, чтобы вернуть его?

Я попробовал bundle install или bundle update в надежде заставить пакет искать камень и установить его обратно, но не работал.

Я также попытался удалить Gemfile.lock и запустить bundle install. Ничего не изменилось, такая же ошибка.

Этот камень является Действовать как taggable на.

Ответ 1

Сначала я сделал gem q --L, ярлык для gem query --local. Он выводит мне все локальные камни.

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)
...

И затем, следуя советам DVG, я удалил драгоценный камень, используя его правильное имя gem uninstall acts-as-taggable-on и запустив bundle install. После этого я снова смог rails c или rails s без проблем.

Ответ 2

Если вы используете rbenv, это позволит вам полностью удалить и переустановить драгоценный камень, например rmagick:

Сначала: попробуйте удалить/переустановить

gem uninstall rmagick
bundle install

Если это не сработает, вы можете удалить всю трассу установленного драгоценного камня. Найдите местоположение установки gem:

bundle show rmagick
BUNDLE_DIR=$(dirname $(dirname $(bundle show rmagick)))
echo $BUNDLE_DIR

Ваш префикс установки gem будет либо по умолчанию, например. ~/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0 или что-то, что вы установили, например. .vendor

Очистите каталог драгоценных камней:

rm -rf $BUNDLE_DIR/gems/rmagick-*

Очистить скомпилированный кеш-камень:

rm $BUNDLE_DIR/cache/rmagick*.gem

Также очистить кеш spec spec:

rm $BUNDLE_DIR/specifications/rmagick*gemspec

Затем вы можете переустановить:

bundle install

Ответ 3

Вы всегда можете использовать:

gem pristine acts-as-taggable-on

pristine - восстанавливает установленные драгоценные камни в исходное состояние из файлов, находящихся в кеше драгоценных камней

Если вы просто хотите восстановить драгоценный камень для текущего проекта, вы должны запустить:

bundle exec gem pristine acts-as-taggable-on

Ответ 4

Из каталога проекта в терминале

gem uninstall gem_name 

Ответ 5

Если вы используете RVM с драгоценными камнями в ~/.rvm/, это работает, если bundle не переустанавливает драгоценный камень.

Сначала удалите источник драгоценного камня:

bundle show $GEM
rm -rf $PATH_TO_GEM

Очистить скомпилированный кеш-камень:

rm -rf ~/.rvm/gems/ruby-$RUBYVERSION[@$GEMSET]/cache/$GEM.gem

Также очистить кеш spec spec:

rm -rf ~/.rvm/gems/ruby-$RUBYVERSION[@$GEMSET]/specifications/$GEM*gemspec

Затем вы можете переустановить:

bundle install

Ответ 6

Если вы пытаетесь переустановить рейк, gem pristine rake завершится с ошибкой Skipped rake-10.X.X, it is a default gem, и пакет также не установит его, поскольку он не может его удалить.

Если вы используете rvm, кажется, проще всего было сделать rvm reinstall 2.x.x. По крайней мере для меня, rvm repair all тоже не помогло.

То же самое можно сказать о всех других драгоценных камнях по умолчанию. Я просто перечислил их здесь, чтобы отчаянные гуглеры нашли какую-то помощь:

  • bigdecimal
  • капельного
  • io-console
  • json
  • minitest
  • psych
  • rake
  • rbtree
  • RDoc
  • тест-блока

Ответ 7

Если вы установили в ./bundle/vendor или подобное, вам нужно сначала удалить жемчуг, но явно указать GEM_HOME, например

GEM_HOME=./vendor/bundle/ruby/2.3.0/ gem uninstall rmagick

Это, безусловно, самый простой способ удалить драгоценные камни, установленные с помощью bundler, в каталог поставщика. В идеале, была бы команда bundle uninstall или bundle reinstall и т.д.

Если ваша цель - просто переустановить, следующая команда поможет:

GEM_HOME=./vendor/bundle/ruby/2.3.0/ gem uninstall rmagick && sudo -u http bundle install

Если вы похожи на меня и у вас есть несколько веб-приложений под каталогом (например, /srv/http), то это делается во всех каталогах:

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