如何使用bundler重新安装gem

wal*_*.ar 56 ruby rubygems bundler

我做了一个bundle show并获得了一个gem目录的完整路径.

不幸的是,我删除了目录rm -r gem_path.然后我的rails应用程序不再工作了.如果我尝试启动服务器或启动rails控制台,则会输出以下错误:

<class:Application>:未初始化的常量MyAPP::Application::Gem(NameError)

我该怎么做才能还掉它?

我试图bundle installbundle update希望强制捆绑搜索gem并将其安装回来,但是没有用.

我也尝试删除Gemfile.lock并运行bundle install.什么都没有改变,同样的错误.

有问题的宝石就是可以作为标记.

wer*_*shy 53

如果使用rbenv,这将让你完全卸载并重新安装一个gem,如rmagick:

第一:尝试简单的卸载/重新安装

gem uninstall rmagick
bundle install
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,您可以删除已安装的gem的所有跟踪.找到您的宝石安装位置:

bundle show rmagick
BUNDLE_DIR=$(dirname $(dirname $(bundle show rmagick)))
echo $BUNDLE_DIR
Run Code Online (Sandbox Code Playgroud)

您的gem安装前缀将是默认值,例如~/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0您设置的内容.vendor

清除gem目录:

rm -rf $BUNDLE_DIR/gems/rmagick-*
Run Code Online (Sandbox Code Playgroud)

清除已编译的gem缓存:

rm $BUNDLE_DIR/cache/rmagick*.gem
Run Code Online (Sandbox Code Playgroud)

同时清除bundler的spec缓存:

rm $BUNDLE_DIR/specifications/rmagick*gemspec
Run Code Online (Sandbox Code Playgroud)

然后你可以重新安装:

bundle install
Run Code Online (Sandbox Code Playgroud)

  • 我想补充说,可能会创建你必须删除的二进制文件,这就是我使用charlock_holmes gem的情况.我不得不删除以下路径以使其完全重建:`vendor/bundle/ruby​​/2.0.0/extensions/x86_64-linux/2.0.0/charlock_holmes-0.6.9.4 /` (4认同)
  • 这对我和@lfxgroove的提示一起工作.在我的基于bundler-and-capistrano的安装中,相关的层次结构不在`vendor /`下,而是在`shared/bundle/ruby​​`等. (2认同)

Cal*_*lin 39

你可以随时使用:

gem pristine acts-as-taggable-on

pristine - 从位于gem缓存中的文件将已安装的gem恢复为pristine条件

如果您只想恢复当前项目的gem,您应该运行:

bundle exec gem pristine acts-as-taggable-on


wal*_*.ar 14

首先,我做了一个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)
...
Run Code Online (Sandbox Code Playgroud)

然后,按照DVG的建议,我使用正确的名称卸载了gem gem uninstall acts-as-taggable-on并运行bundle install.之后我能够rails c或者rails s再次没有任何问题.

  • 你有没有尝试过`bundle exec gem uninstall-gem-in-question`?我知道`gem list`显示了所有版本,但是`bundle exec gem list`显示了特定于bundle的gems. (2认同)

Saz*_*zad 11

从终端的项目目录

gem uninstall gem_name 
Run Code Online (Sandbox Code Playgroud)

  • 迄今为止最好的答案。只是`捆绑安装` (2认同)

Jos*_*phL 9

如果将RVM与gems一起使用~/.rvm/,如果bundle不重新安装gem,则可以使用.

首先,删除gem源:

bundle show $GEM
rm -rf $PATH_TO_GEM
Run Code Online (Sandbox Code Playgroud)

清除已编译的gem缓存:

rm -rf ~/.rvm/gems/ruby-$RUBYVERSION[@$GEMSET]/cache/$GEM.gem
Run Code Online (Sandbox Code Playgroud)

同时清除bundler的spec缓存:

rm -rf ~/.rvm/gems/ruby-$RUBYVERSION[@$GEMSET]/specifications/$GEM*gemspec
Run Code Online (Sandbox Code Playgroud)

然后你可以重新安装:

bundle install
Run Code Online (Sandbox Code Playgroud)


ioq*_*tix 6

如果你已安装./bundle/vendor或类似,你需要先删除gem,但明确指定GEM_HOME,例如

GEM_HOME=./vendor/bundle/ruby/2.3.0/ gem uninstall rmagick
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是将使用bundler安装的gem卸载到供应商目录中的最简单方法.理想情况下,会有一个命令bundle uninstallbundle reinstall等等.

如果您的目标是简单地重新安装,以下命令将有所帮助:

GEM_HOME=./vendor/bundle/ruby/2.3.0/ gem uninstall rmagick && sudo -u http bundle install
Run Code Online (Sandbox Code Playgroud)

如果您像我一样并且在目录下有多个Web应用程序(例如/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
Run Code Online (Sandbox Code Playgroud)


Mag*_*gne 6

bundle exec gem uninstall <gem_name>- 从包(<app_root>/vendor/bundle/ruby/2.3.0/gems/路径)中卸载 gem 。这相当于@ioquatix 给出的答案,但他正在寻找更方便的解决方案。

gem uninstall <gem_name> - 仅从系统中的全局 gemset 中卸载 gem