【问题标题】:Spork error with bundle exec?bundle exec的Spork错误?
【发布时间】:2024-01-08 18:32:02
【问题描述】:

每当我运行spork 时,我都会收到以下错误:

You have already activated spork 0.9.0.rc8, but your Gemfile requires spork 0.8.5. Consider using bundle exec. (Gem::LoadError)

我的宝石文件:

group :development, :test do
    gem "rspec"
    gem "rspec-rails"
    gem "factory_girl_rails"
    gem 'spork' 
    gem 'webrat'
    gem 'awesome_print'

    gem 'vcr'
    gem 'fakeweb'
end

我跑过bundle updategem update 甚至gem update --system,但我仍然看到这个错误。运行bundle exec spork 有效,但我想知道为什么spork 不能以及如何解决这个问题。

【问题讨论】:

    标签: gem spork


    【解决方案1】:

    在您的 Gemfile 中,您可以指定:

    gem 'spork', :version => 0.8.5
    

    您也可能想删除较新的 spork:

    gem uninstall spork -v=0.9.0.rc8
    

    【讨论】:

      【解决方案2】:

      也许你的问题已经解决了(我会假设),但最近几天我遇到了类似的问题,并找到了这个错误的原因。它与使用 bundler 时所有需要的 gem 的版本控制有关。当只提供“spork”时,RubyGems 会被激活并寻找合适的版本。但这会绕过捆绑器将使用的 Gemfile 中的指定版本。只有当使用“bundle exec spork”时,bundler 才能从Gemfile 中查找版本。在您的情况下,“spork”指向已安装的 gem,版本为“0.9.0”,而“bundle exec spork”使用“0.8.5”。 有一个可用的标志(“bundle exec --binstubs”)创建一个“bin”文件夹(>= bundler 1.0)并将 Gemfile 指定的所有可执行文件放入其中。代替“bundle exec spork”,写“bin/spork”是有效的。

      搜索 Yehuda Katz 的“Gem Versioning and Bundler: Doing it Right”,它更详细地解释了一切,对我帮助很大。

      【讨论】: