Как переустановить драгоценный камень с помощью связки
Я сделал 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