TL;博士:
解决眼前问题的最简单和最安全的方法是
gem uninstall railties
略长且更完整的方法
如果要卸载gem install rails
已安装的所有内容,可以获取要运行的命令列表:
gem dependency rails --pipe | ruby -ne 'puts $_.gsub(/\([0-9\. <>=~,]*\)/,"")' | ruby -ne 'puts "gem uninstall #{$_}"'
复制它们并一个接一个地运行它们,对于每一个,您都会被告知还有什么依赖于它,并询问您是否要继续卸载。如果您在列表中看到任何不属于 rails 的内容(假设您已经安装了需要该版本的其他东西active_record
),请离开它,否则继续卸载。
更长的解释
显示的版本取自railties
gem的版本,不是通过卸载rails
gem来卸载的。
如果你打开rails
可执行文件
vim `which rails`
(或您选择的编辑器的等效项)您将在底部看到代码,该代码根据以下版本决定使用哪个版本的 rails railties
:
#!/usr/bin/env ruby_noexec_wrapper
#
# This file was generated by RubyGems.
#
# The application 'railties' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
version = ">= 0"
if ARGV.first
str = ARGV.first
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
if str =~ /\A_(.*)_\z/
version = $1
ARGV.shift
end
end
gem 'railties', version
load Gem.bin_path('railties', 'rails', version)
因此,最简单的解决方案就是gem install railsties
. RubyGems(我可以找到)没有内置的解决方案可以检测哪些其他 gem 安装了 rails并且不再被其他任何东西使用并卸载它们。RubyGems 没有独占依赖的概念,所以即使除了rails
uses之外没有别的东西railties
,你仍然不得不知道它(和其他一些东西)是遗留下来的,必须手动卸载。这并不理想,但这是我们现在所拥有的,而且还不错,尤其是如果您使用上面的解决方案来查找并删除所有 rails 依赖项。