与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 rake
或rm Gemfile.lock && bundle install
似乎有所帮助,我到目前为止唯一的解决方案是在Gemfile.lock中手动将rack (1.6.4)
更改为rack (1.6.0)
。
答案 0 :(得分:14)
您需要卸载一个不需要的机架版本。
请这样做
gem uninstall rack -v 1.6.0
参考:How to force rack to work around the usual "You have already activated rack..." bug?
答案 1 :(得分:2)
一位经验丰富的Rails开发人员highly recommends使用binstubs。安装它:
bundle install --binstubs
并通过相对路径运行它:
./bin/rails server
或最推荐的更新PATH并忘记捆绑问题:
export PATH="./bin:$PATH"
rails server
答案 2 :(得分:1)
像这样运行:bundle exec rails s
。这将使用Gemfile.lock
答案 3 :(得分:0)
您只需在cmd下运行即可安装服务器中的最新机架以解决问题:
gem install rack
答案 4 :(得分:0)
如果您将本地或全局gemset用于多个项目,则可能会出现这些问题。为什么不为每个项目创建单独的gemset。
您可以使用rvm执行此操作
创建新的宝石集
rvm gemset create new_test
rvm gemset use new_test
bundle install
答案 5 :(得分:0)
我遇到了这个问题:
这是我的解决方案:
解决方案1 :
此解决方案在很多时候都有效,只需更新引起问题的gem。
bundle update rack
解决方案2 :
在某些情况下,解决方案1 可能不起作用,因此您需要编辑Gemfile.lock
文件。
只需打开您的Gemfile.lock
文件,然后将版本更改为请求的更新即可。
在我的情况下,我在rack 2.0.7
文件中定义了Gemfile.lock
,但是我的应用程序需要rack 2.1.2
,我只需要在{{ 1}}文件。
然后我必须卸载机架的先前版本rack 2.1.2
Gemfile.lock
最后在生产中安装了新宝石
rack 2.0.7
解决方案3 :
在极少数情况下,解决方案1 和解决方案2 可能不起作用,并且您需要在更新gem之前编辑 gem uninstall rack -v 2.0.7
。
在我的情况下,gem是bundle install --without development test
,我在Gemfile
中定义了puma
,但是我的应用程序需要puma ~> 3.11
。此时运行Gemfile
并编辑我的puma ~> 4.3.1
文件是行不通的,因为Gemfile中指定的bundle update puma
版本不允许更新到Gemfile.lock
。
我只需要将Gemfile中puma的版本更改为puma ~> 3.11
,然后运行命令即可。
puma ~> 4.3.1
仅此而已。
我希望这会有所帮助