【问题标题】:You have already activated rack 1.6.0, but your Gemfile requires rack 1.6.4你已经激活了 rack 1.6.0,但是你的 Gemfile 需要 rack 1.6.4
【发布时间】:2015-10-24 21:26:02
【问题描述】:

类似于problem with rack 1.3.2. You have already activated rack 1.3.2, but your Gemfile requires rack 1.2.3 -- 我在尝试使用 Puma 和 Nginx 在生产环境中运行 Rails (4.2) 时遇到You have already activated rack 1.6.0, but your Gemfile requires rack 1.6.4

bundle update rakerm Gemfile.lock && bundle install 似乎有帮助,到目前为止我唯一的解决方案是在 Gemfile.lock 中手动将 rack (1.6.4) 更改为 rack (1.6.0)

【问题讨论】:

  • 这与您的情况类似。 stackoverflow.com/questions/9241912/…。你必须像这样删除机架版本 1.6.0 gem uninstall rack -v 1.6.0
  • 你试过 binstub 吗?检查下面的答案
  • 这确实起到了作用@Athar - tyvm!

标签: ruby-on-rails nginx rack gemfile


【解决方案1】:

像这样运行它:bundle exec rails s。这将使用 Gemfile.lock 中的设置

【讨论】:

  • 谢谢,但请参阅上面 Athar 的评论。
  • 无论您多么仔细地安装或卸载 gem,您最终都会得到多个版本。运行它是 bundle exec 是正确的方法,并从您的部署中消除版本歧义
  • @Zepplock 对,"binstubs" 是一种避免一直添加 bundle exec 的方法
【解决方案2】:

一位经验丰富的 Rails 开发人员 highly recommends 使用 binstubs。由以下人员安装:

bundle install --binstubs

并通过相对路径运行:

./bin/rails server

或者最推荐的更新 PATH 并忘记捆绑器问题:

export PATH="./bin:$PATH"
rails server

【讨论】:

  • 不,这是使用 Puma 生产的。 Athar 上面的评论修复了它。谢谢!
  • 如果不正确修复会再次发生
【解决方案3】:

您需要卸载一个不需要的机架版本。

请这样做

gem uninstall rack -v 1.6.0

参考:How to force rack to work around the usual "You have already activated rack..." bug?

【讨论】:

    【解决方案4】:

    您可以简单地在 cmd 下运行以在服务器中安装最新的机架来解决问题:

    gem install rack
    

    【讨论】:

      【解决方案5】:

      如果您将本地或全局 gemset 用于多个项目,则可能会出现这些问题。为什么不为每个项目创建单独的 gemset。

      你可以使用 rvm 来做到这一点

      创建新的宝石集

      rvm gemset create new_test
      
      rvm gemset use new_test
      
      bundle install
      

      【讨论】:

      • 确实如此。多个项目是我的问题,这是一个干净的解决方案。此外,将 #ruby-gemset=new_test 添加到 Gemfile 会设置项目的 gemset
      【解决方案6】:

      我遇到了这个问题:

      这是我的解决方案

      解决方案 1

      此解决方案在很多时候都有效,只需更新导致问题的 gem。

      bundle update rack
      

      解决方案 2

      在某些情况下,解决方案 1 可能不起作用,您需要编辑您的 Gemfile.lock 文件。

      只需打开您的 Gemfile.lock 文件,然后将版本更改为请求的更新。

      就我而言,我在Gemfile.lock 文件中定义了rack 2.0.7,但我的应用程序需要rack 2.1.2,我只需在Gemfile.lock 文件中将其修改为rack 2.1.2

      然后我不得不卸载以前版本的机架 rack 2.0.7

       gem uninstall rack -v 2.0.7
      

      最后在生产环境中安装了新的 gem

      bundle install --without development test
      

      解决方案 3

      在极少数情况下,解决方案 1解决方案 2 可能不起作用,您需要在更新 gem 之前编辑您的 Gemfile

      在我的例子中,gem 是puma,我在Gemfile 中定义了puma ~> 3.11,但我的应用程序需要puma ~> 4.3.1。此时运行bundle update puma 并编辑我的Gemfile.lock 文件不起作用,因为Gemfile 中指定的puma ~> 3.11 版本不允许更新到puma ~> 4.3.1

      我只需将 Gemfile 中 puma 的版本更改为 puma ~> 4.3.1 然后运行命令。

      bundle update puma
      

      就是这样。

      我希望这会有所帮助

      【讨论】:

        猜你喜欢
        • 2011-11-11
        • 2015-11-21
        • 2011-09-13
        • 2015-09-19
        • 2011-11-06
        • 2017-08-22
        • 2013-01-07
        • 1970-01-01
        • 2017-08-29
        相关资源
        最近更新 更多