【问题标题】:Prevent application from creating a gemset阻止应用程序创建 gemset
【发布时间】:2014-01-24 20:01:23
【问题描述】:

我有从 github 克隆的 Rails 应用程序:

https://github.com/RailsApps/rails3-devise-rspec-cucumber

当我运行 bundle 时,会创建一个新的 gemset rails3-devise-rspec-cucumber

  1. 您能否解释一下,为什么特定应用程序会强制 rvm 创建 gemset,而其他任何应用程序都不会这样做?

  2. 如何防止应用程序创建 gemset 并强制它使用 global gemset

谢谢!

【问题讨论】:

    标签: ruby-on-rails rvm gemset


    【解决方案1】:

    查看您链接的存储库中的文件列表。您应该会看到两个名为 .ruby-version.ruby-gemset 的文件。后者是 RVM 用来确定要使用的 gemset。

    就个人而言,我不建议仅仅因为此应用程序安装的任何 gem 都将包含在该 gemset 中,而不会影响其他任何 gem(也使事情保持整洁),因此不建议更改 gemset。

    但是,如果您确实希望更改此行为,您可以编辑 .ruby-gemset 文件并将 rails3-devise-rspec-cucumber 行更改为 global,或者在命令行中,只需执行 rvm gemset use global

    请注意,后一种解决方案只是临时的,当您重新加载该目录时,rvm 将直接指向 .ruby-gemset 文件中指示的任何 gemset。

    【讨论】:

    • 感谢您的回复!我想如果我删除.ruby-version.ruby-gemset,它会像往常一样运行Rails 应用程序(使用rails new... 创建)。但它没有 - 当我运行 bundle 时,我仍然得到一个新的 gemset。是不是应该这样?
    • @AlexSmolov 如果您删除了这两个文件,并且没有更改目录,则 gemset 和 ruby​​ 版本将保持不变。把它想象成一个在你进入目录时立即执行的脚本;它基本上以某种方式设置了一个“价值”。因此,您必须删除这些文件,然后执行cd .. 然后重新进入项目目录,或者干脆执行cd .,这应该具有相同的效果。之后,您应该会看到您的 rvm gemset 恢复为您的默认 gemset(我猜通常是全局的)。
    • @AlexSmolov 哦,另外,您一直提到,只要您运行 bundle,就会创建 gemset,但情况并非如此。 Bundle 实际上对它们一无所知。所有 bundle 所做的只是将 gem 转储到您当前的 gem 主页(由环境变量 $GEM_HOME 指示),每当您进入包含这两个文件的目录时,RVM 都会设置和重新设置。您可以通过手动将当前 RVM gemset 设置为另一个 gemset 来确认这一点(在进入项目目录之前),然后进入目录并查看更改。
    猜你喜欢
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 2015-04-21
    • 2012-07-12
    • 1970-01-01
    • 2020-12-13
    • 2012-09-03
    • 1970-01-01
    相关资源
    最近更新 更多