73

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

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

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

我应该怎么做才能让它回来?

我尝试bundle installbundle update希望强制捆绑搜索 gem 并将其安装回来,但没有奏效。

我也试过删除Gemfile.lock并运行bundle install. 没有任何改变,同样的错误。

有问题的 gem 是Act as taggable on

4

8 回答 8

72

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

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

gem uninstall rmagick
bundle install

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

清除已编译的 gem 缓存:

rm $BUNDLE_DIR/cache/rmagick*.gem

还要清除捆绑器的规范缓存:

rm $BUNDLE_DIR/specifications/rmagick*gemspec

然后你可以重新安装:

bundle install
于 2013-11-06T22:03:21.440 回答
45

您可以随时使用:

gem pristine acts-as-taggable-on

原始 - 从位于 gem 缓存中的文件将已安装的 gem 恢复到原始状态

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

bundle exec gem pristine acts-as-taggable-on

于 2014-02-19T14:09:02.653 回答
14

首先我做了一个gem q --L, 的快捷方式gem 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 的建议,我使用正确的名称卸载了 gemgem uninstall acts-as-taggable-on并运行了bundle install. 在那之后,我能够rails crails s再次没有任何问题。

于 2012-08-31T01:50:23.313 回答
13

从终端的项目目录

gem uninstall gem_name 
于 2015-01-12T03:57:01.587 回答
9

如果在 中使用带有 gems 的RVM~/.rvm/ ,如果bundle不重新安装 gem,这将有效。

首先,删除gem源:

bundle show $GEM
rm -rf $PATH_TO_GEM

清除已编译的 gem 缓存:

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

还要清除捆绑器的规范缓存:

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

然后你可以重新安装:

bundle install
于 2014-06-18T03:22:22.597 回答
7

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

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

到目前为止,这是将使用 bundler 安装的 gem 卸载到供应商目录中的最简单方法。理想情况下,会有一个命令bundle uninstallorbundle 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
于 2016-06-26T12:24:46.347 回答
7

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

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

于 2018-01-04T11:16:39.017 回答
3

如果您尝试重新安装 rake,gem pristine rake将会失败,Skipped rake-10.X.X, it is a default gem并且 bundle 也不会安装它,因为它无法卸载它。

如果您使用的是 rvm,似乎最简单的方法就是简单地做一个rvm reinstall 2.x.x. 至少对我来说,rvm repair all也没有帮助。

所有其他默认宝石可能也是如此。我将在这里列出它们,以便绝望的谷歌人找到一些帮助:

  • 大十进制
  • io 控制台
  • json
  • 小测试
  • 心理
  • 红树
  • rdoc
  • 测试单元
于 2015-12-01T16:30:35.017 回答