如何使用捆绑器重新安装gem

我做了一个bundle show并获得了一个gem目录的完整path。

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

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

我应该怎么做才能回来?

我尝试bundle installbundle update ,希望强制捆绑search的gem和安装它,但没有奏效。

我也尝试删除Gemfile.lock并运行bundle install 。 没有改变,相同的错误。

有问题的gem是作为标签上的行为

你可以随时使用:

gem pristine acts-as-taggable-on

pristine – 从位于gemcaching中的文件中恢复已安装的gem到原始状态

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

bundle exec gem pristine acts-as-taggable-on

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

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

 gem uninstall rmagick bundle install 

如果这不起作用,您可以删除已安装的gem的所有痕迹。 find你的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

清除gem目录:

 rm -rf $BUNDLE_DIR/gems/rmagick-* 

清除编译的gemcaching:

 rm $BUNDLE_DIR/cache/rmagick*.gem 

还要清除捆绑商的规格caching:

 rm $BUNDLE_DIR/specifications/rmagick*gemspec 

然后你可以重新安装:

 bundle install 

首先,我做了一个gem q --Lgem query --local的快捷方式。 它会输出所有安装的本地gem。

 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的build议,我使用正确的名称gem uninstall acts-as-taggable-on卸载了gem gem uninstall acts-as-taggable-on并运行了bundle install 。 之后,我能够再次rails crails s没有任何问题。

如果在~/.rvm/使用带有gem的RVM ,如果bundle没有重新安装一个gem,这将起作用。

首先,删除gem来源:

 bundle show $GEM rm -rf $PATH_TO_GEM 

清除编译的gemcaching:

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

还要清除捆绑商的规格caching:

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

然后你可以重新安装:

 bundle install 

从terminal中的项目目录

 gem uninstall gem_name 

如果你正在尝试重新安装rake,那么gem pristine rake将会失败,并Skipped rake-10.XX, it is a default gem ,bundle也不会安装它,因为它不能卸载它。

如果你使用的是rvm,看起来最简单的做法是简单地做一个rvm reinstall 2.xx 至less对我来说, rvm repair all也都没有帮助。

对于所有其他默认的gem也是如此。 我只是在这里列出他们,让绝望的谷歌find一些帮助:

  • BigDecimal的
  • IO-控制台
  • JSON
  • MINITEST
  • 迷幻
  • rbtree
  • 的RDoc
  • testing单元

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

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

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

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

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

如果你像我一样在一个目录下有几个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