【问题标题】:How to force rack to work around the usual "You have already activated rack..." bug?如何强制机架解决通常的“您已经激活机架......”错误?
【发布时间】:2012-03-03 18:09:19
【问题描述】:

这是一个常见问题,但似乎没有一个答案可以解决问题。我得到了通常的:You have already activated rack 1.4.1, but your Gemfile requires rack 1.3.6. Using bundle exec may solve this.

清除 Gemlock 文件没有任何作用,再次运行 bundle install 没有任何作用...运行 bundle install --binstubs 并没有解决问题,因为“从您的应用根目录运行 ./bin/{rake|rails|etc}”只是导致更多错误。有没有办法解决这个明显常见的问题?

【问题讨论】:

    标签: ruby-on-rails rack


    【解决方案1】:

    有时您只需安装 gem。

    我在 openshift 上遇到了这个问题,然后去了项目目录:

    $ rhc ssh APP_NAME

    $ cd app-root

    $ gem install GEM_NAME

    之后应用正常启动。

    【讨论】:

      【解决方案2】:

      如果与 Spring 相关的相同错误消息将您带到这里,即您收到与此类似的消息:

      您已经激活了 spring 1.4.0,但是您的 Gemfile 需要 spring 1.3.6。

      解决方案与接受的答案相同:

      gem uninstall spring -v 1.4.0
      

      【讨论】:

        【解决方案3】:

        当您从存储库(ejem.github)克隆项目时,这个问题也很常见,因为它可能已经有 Gemsfile.lock。因此,它拥有的宝石可能与您的环境已经加载的宝石不同。因此,首先备份您的 Gemsfile.lock,然后将其删除并运行 bundle install --without production 。它将根据 GemFile 安装所有依赖项。请注意,如果应用程序较旧,它可能无法与您机器上的环境一起使用。

        【讨论】:

          【解决方案4】:

          我在尝试部署生产应用程序时遇到了同样的问题。我正在使用 rbenv 来管理默认安装到 rbenv 中的 ruby​​ 环境独角兽。 Gemfile 中列出的 gem 依赖项正在由 bundler 安装。碰巧这是导致问题的原因。

          我所做的解决方法是从 rbenv 的环境中卸载 unicorn 并通过 Gemfile 安装它。毕竟,我认为这种方法更简洁明了。

          如果您使用的是 RVM,如果您在全局环境中定义一个依赖于机架的 gem,就像 unicorn 一样,然后定义一个每个项目的 gemset,就会出现问题。我认为这是因为 rails 3.1 的依赖关系(不过我不确定)。解决方案是从全局 gemset 中卸载 unicorn(或安装 rack 1.4.1 的 gem)并将其安装到每个项目的 gemset 中。

          如果您使用的是 bundler 和 RVM,您有两种选择: - 使用 rails 和安装 rack 1.4.1 的 gem 创建一个 gemset(最适合开发工作站) - 将依赖于 rack 1.4.1 的 gem 放入 Gemfile 并让 bundler 发挥作用。

          【讨论】:

            【解决方案5】:

            打开 Gemfile.lock,找到 rack (1.3.6) 的条目并删除它。

            【讨论】:

            • @PiotrekOkoński 那他怎么能把它删掉呢?
            【解决方案6】:

            问题是这样的:

            • 您(至少)安装了两个版本的 Rack。

            • 您的 Gemfile 需要一个版本 (1.3.6)。您当前的环境正在提供另一个版本 (1.4.1)。

            • 在您的应用程序执行时,当前环境已经加载了 1.4.1。

            • Bundler 知道您需要加载 1.3.6,但它无法加载它。同一个 gem 不能加载多个版本,因此 1.4.1 版本会优先加载。

            • Bundler 向您抱怨。

            卸载有问题的 gem(例如gem uninstall rack -v 1.3.6)。更好的是,使用 RVM 和 gemsets 更好地隔离你的 gem,你就不会遇到这个问题了。

            【讨论】:

            • 感谢您深思熟虑的回答。但是,我以另一种方式修复了它。我将站点更新为 Rails 3.2.1。幸运的是,该网站的其余部分可以接受更新。
            猜你喜欢
            • 2012-05-17
            • 2018-11-20
            • 2014-06-20
            • 2015-10-07
            • 1970-01-01
            • 2011-11-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多