Rails 3:Bundle Exec

时间:2011-07-19 13:42:13

标签: ruby-on-rails heroku bundler

尝试使用Mongrel时,我得到以下信息:

  

您已经激活了守护进程1.1.0,但您的Gemfile需要   守护进程1.0.10。考虑使用bundle exec。 (GEM :: LoadError)

谢谢!

编辑:

我的Gemfile:

source 'http://rubygems.org'

gem 'rake', '0.8.7'
gem 'rails', '3.0.0'
gem 'mysql2', '0.2.7'
gem 'tabs_on_rails'
gem 'tabulous'
gem 'devise'
gem 'cancan'
gem 'kaminari'
gem 'formtastic', '~> 1.2.0'
gem 'jquery-rails'
gem 'client_side_validations'
gem 'paperclip'
gem 'paper_trail'
gem 'acts-as-taggable-on'
gem 'acts_as_tree'
gem 'acts_as_list'
gem 'hpricot'
gem 'rails3-jquery-autocomplete'
gem 'meta_where'
gem 'meta_search'
gem 'aws-s3'
gem 'flash_cookie_session'
gem 'mime-types', :require => 'mime/types'
gem 'vanities'
gem 'geokit'
gem 'geokit-rails'
gem 'tiny_mce'
gem 'RedCloth'
gem 'omniauth'
gem 'twitter'
gem 'fb_graph'
gem 'linkedin'
gem 'whenever'
gem 'resque'

group :development, :test do
  gem 'faker'
  gem 'mocha'
  gem 'rails-erd'
  gem 'rspec'
  gem 'rspec-rails'
  gem 'webrat'
  gem 'pickle'
end

2 个答案:

答案 0 :(得分:2)

bundle exec是用于允许Bundler完成工作并管理不同应用程序(可以运行相同gem的不同版本)的gem的命令。如果您运行bundle,然后尝试在shell中运行ruby foo.rb,则将忽略Gemfile,并且将使用每个gem require d的最新版本。

Heroku在启动您的应用程序时已经使用bundle exec。这是内置于平台中的,这是使他们能够像他们一样真正处理slu it的唯一方法。

我认为您的问题源于您运行的两个不同宝石之间的不兼容性。如果一个gem依赖于foo ~> 0.2.3并且另一个gem依赖于foo >= 0.3,那么您将无法同时运行它们 - 您不能拥有两个版本的相同gem可用在同一过程中。您可以在开发中运行bundle并仔细检查Gemfile.lock来验证这一点。另外,请确保您的Gemfile.lock正在检入您的存储库;如果你只是将你的机器上运行的Gemfile推送到Heroku并且它们基于它安装,它们可能会结束具有不同依赖关系的新版本的库(我不确定Heroku是否会抱怨如果你没有Gemfile.lock)。

答案 1 :(得分:0)

您用于开发中的其他服务器的任何宝石都需要放在开发名称空间下或将其取出。

例如。我只想要这个宝石用于开发。为这些宝石做这件事:

group :development do
    gem 'capistrano', '2.6.0', :require => nil
end