2010-01-31 87 views
2

我一直在使用Bundler的问题,并能够访问我的宝石,而无需要求他们在某个地方,因为config.gem曾经为我做过(据我所知)。在我的Rails 3应用程序,我定义我的Gemfile像这样:Bundler不加载宝石

clear_sources 
source "http://gemcutter.org" 
source "http://gems.github.com" 
bundle_path "vendor/bundler_gems" 

## Bundle edge rails: 
git "git://github.com/rails/arel.git" 
git "git://github.com/rails/rack.git" 
gem "rails", :git => "git://github.com/rails/rails.git" 

## Bundle 
gem "mongo_mapper", :git => "git://github.com/jnunemaker/mongomapper.git" 
gem "bluecloth", ">= 2.0.0" 

然后我跑gem bundle,它捆绑了这一切像预期。这里面包括内boot.rbenvironment.rb文件时,它看起来是这样的:

# DO NOT MODIFY THIS FILE 
module Bundler 
file = File.expand_path(__FILE__) 
dir = File.dirname(file) 

    ENV["PATH"]  = "#{dir}/../../../../bin:#{ENV["PATH"]}" 
    ENV["RUBYOPT"] = "-r#{file} #{ENV["RUBYOPT"]}" 

    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/builder-2.1.2/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/builder-2.1.2/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/text-hyphen-1.0.0/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/text-hyphen-1.0.0/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/i18n-0.3.3/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/i18n-0.3.3/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/arel/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/arel/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/activemodel/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/activemodel/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/jnunemaker-validatable-1.8.1/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/jnunemaker-validatable-1.8.1/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/abstract-1.0.0/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/abstract-1.0.0/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/erubis-2.6.5/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/erubis-2.6.5/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/mime-types-1.16/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/mime-types-1.16/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/mail-2.1.2/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/mail-2.1.2/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/rake-0.8.7/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/rake-0.8.7/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/railties/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/railties/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/memcache-client-1.7.7/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/memcache-client-1.7.7/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rack/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rack/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/rack-test-0.5.3/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/rack-test-0.5.3/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/rack-mount-0.4.5/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/rack-mount-0.4.5/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/actionpack/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/actionpack/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/bluecloth-2.0.7/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/bluecloth-2.0.7/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/bluecloth-2.0.7/ext") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/activerecord/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/activerecord/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/text-format-1.0.0/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/text-format-1.0.0/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/actionmailer/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/actionmailer/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/tzinfo-0.3.16/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/tzinfo-0.3.16/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/activesupport/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/activesupport/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/activeresource/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/activeresource/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/mongo-0.18.2/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/gems/mongo-0.18.2/lib") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/mongomapper/bin") 
    $LOAD_PATH.unshift File.expand_path("#{dir}/dirs/mongomapper/lib") 

    @gemfile = "#{dir}/../../../../Gemfile" 

    require "rubygems" unless respond_to?(:gem) # 1.9 already has RubyGems loaded 

    @bundled_specs = {} 
    @bundled_specs["builder"] = eval(File.read("#{dir}/specifications/builder-2.1.2.gemspec")) 
    @bundled_specs["builder"].loaded_from = "#{dir}/specifications/builder-2.1.2.gemspec" 
    @bundled_specs["text-hyphen"] = eval(File.read("#{dir}/specifications/text-hyphen-1.0.0.gemspec")) 
    @bundled_specs["text-hyphen"].loaded_from = "#{dir}/specifications/text-hyphen-1.0.0.gemspec" 
    @bundled_specs["i18n"] = eval(File.read("#{dir}/specifications/i18n-0.3.3.gemspec")) 
    @bundled_specs["i18n"].loaded_from = "#{dir}/specifications/i18n-0.3.3.gemspec" 
    @bundled_specs["arel"] = eval(File.read("#{dir}/specifications/arel-0.2.pre.gemspec")) 
    @bundled_specs["arel"].loaded_from = "#{dir}/specifications/arel-0.2.pre.gemspec" 
    @bundled_specs["activemodel"] = eval(File.read("#{dir}/specifications/activemodel-3.0.pre.gemspec")) 
    @bundled_specs["activemodel"].loaded_from = "#{dir}/specifications/activemodel-3.0.pre.gemspec" 
    @bundled_specs["jnunemaker-validatable"] = eval(File.read("#{dir}/specifications/jnunemaker-validatable-1.8.1.gemspec")) 
    @bundled_specs["jnunemaker-validatable"].loaded_from = "#{dir}/specifications/jnunemaker-validatable-1.8.1.gemspec" 
    @bundled_specs["abstract"] = eval(File.read("#{dir}/specifications/abstract-1.0.0.gemspec")) 
    @bundled_specs["abstract"].loaded_from = "#{dir}/specifications/abstract-1.0.0.gemspec" 
    @bundled_specs["erubis"] = eval(File.read("#{dir}/specifications/erubis-2.6.5.gemspec")) 
    @bundled_specs["erubis"].loaded_from = "#{dir}/specifications/erubis-2.6.5.gemspec" 
    @bundled_specs["mime-types"] = eval(File.read("#{dir}/specifications/mime-types-1.16.gemspec")) 
    @bundled_specs["mime-types"].loaded_from = "#{dir}/specifications/mime-types-1.16.gemspec" 
    @bundled_specs["mail"] = eval(File.read("#{dir}/specifications/mail-2.1.2.gemspec")) 
    @bundled_specs["mail"].loaded_from = "#{dir}/specifications/mail-2.1.2.gemspec" 
    @bundled_specs["rake"] = eval(File.read("#{dir}/specifications/rake-0.8.7.gemspec")) 
    @bundled_specs["rake"].loaded_from = "#{dir}/specifications/rake-0.8.7.gemspec" 
    @bundled_specs["railties"] = eval(File.read("#{dir}/specifications/railties-3.0.pre.gemspec")) 
    @bundled_specs["railties"].loaded_from = "#{dir}/specifications/railties-3.0.pre.gemspec" 
    @bundled_specs["memcache-client"] = eval(File.read("#{dir}/specifications/memcache-client-1.7.7.gemspec")) 
    @bundled_specs["memcache-client"].loaded_from = "#{dir}/specifications/memcache-client-1.7.7.gemspec" 
    @bundled_specs["rack"] = eval(File.read("#{dir}/specifications/rack-1.1.0.gemspec")) 
    @bundled_specs["rack"].loaded_from = "#{dir}/specifications/rack-1.1.0.gemspec" 
    @bundled_specs["rack-test"] = eval(File.read("#{dir}/specifications/rack-test-0.5.3.gemspec")) 
    @bundled_specs["rack-test"].loaded_from = "#{dir}/specifications/rack-test-0.5.3.gemspec" 
    @bundled_specs["rack-mount"] = eval(File.read("#{dir}/specifications/rack-mount-0.4.5.gemspec")) 
    @bundled_specs["rack-mount"].loaded_from = "#{dir}/specifications/rack-mount-0.4.5.gemspec" 
    @bundled_specs["actionpack"] = eval(File.read("#{dir}/specifications/actionpack-3.0.pre.gemspec")) 
    @bundled_specs["actionpack"].loaded_from = "#{dir}/specifications/actionpack-3.0.pre.gemspec" 
    @bundled_specs["bluecloth"] = eval(File.read("#{dir}/specifications/bluecloth-2.0.7.gemspec")) 
    @bundled_specs["bluecloth"].loaded_from = "#{dir}/specifications/bluecloth-2.0.7.gemspec" 
    @bundled_specs["activerecord"] = eval(File.read("#{dir}/specifications/activerecord-3.0.pre.gemspec")) 
    @bundled_specs["activerecord"].loaded_from = "#{dir}/specifications/activerecord-3.0.pre.gemspec" 
    @bundled_specs["text-format"] = eval(File.read("#{dir}/specifications/text-format-1.0.0.gemspec")) 
    @bundled_specs["text-format"].loaded_from = "#{dir}/specifications/text-format-1.0.0.gemspec" 
    @bundled_specs["actionmailer"] = eval(File.read("#{dir}/specifications/actionmailer-3.0.pre.gemspec")) 
    @bundled_specs["actionmailer"].loaded_from = "#{dir}/specifications/actionmailer-3.0.pre.gemspec" 
    @bundled_specs["tzinfo"] = eval(File.read("#{dir}/specifications/tzinfo-0.3.16.gemspec")) 
    @bundled_specs["tzinfo"].loaded_from = "#{dir}/specifications/tzinfo-0.3.16.gemspec" 
    @bundled_specs["activesupport"] = eval(File.read("#{dir}/specifications/activesupport-3.0.pre.gemspec")) 
    @bundled_specs["activesupport"].loaded_from = "#{dir}/specifications/activesupport-3.0.pre.gemspec" 
    @bundled_specs["activeresource"] = eval(File.read("#{dir}/specifications/activeresource-3.0.pre.gemspec")) 
    @bundled_specs["activeresource"].loaded_from = "#{dir}/specifications/activeresource-3.0.pre.gemspec" 
    @bundled_specs["rails"] = eval(File.read("#{dir}/specifications/rails-3.0.pre.gemspec")) 
    @bundled_specs["rails"].loaded_from = "#{dir}/specifications/rails-3.0.pre.gemspec" 
    @bundled_specs["mongo"] = eval(File.read("#{dir}/specifications/mongo-0.18.2.gemspec")) 
    @bundled_specs["mongo"].loaded_from = "#{dir}/specifications/mongo-0.18.2.gemspec" 
    @bundled_specs["mongo_mapper"] = eval(File.read("#{dir}/specifications/mongo_mapper-0.6.10.gemspec")) 
    @bundled_specs["mongo_mapper"].loaded_from = "#{dir}/specifications/mongo_mapper-0.6.10.gemspec" 

    def self.add_specs_to_loaded_specs 
    Gem.loaded_specs.merge! @bundled_specs 
    end 

    def self.add_specs_to_index 
    @bundled_specs.each do |name, spec| 
     Gem.source_index.add_spec spec 
    end 
    end 

    add_specs_to_loaded_specs 
    add_specs_to_index 

    def self.require_env(env = nil) 
    context = Class.new do 
     def initialize(env) @env = env && env.to_s ; end 
     def method_missing(*) ; yield if block_given? ; end 
     def only(*env) 
     old, @only = @only, _combine_only(env.flatten) 
     yield 
     @only = old 
     end 
     def except(*env) 
     old, @except = @except, _combine_except(env.flatten) 
     yield 
     @except = old 
     end 
     def gem(name, *args) 
     opt = args.last.is_a?(Hash) ? args.pop : {} 
     only = _combine_only(opt[:only] || opt["only"]) 
     except = _combine_except(opt[:except] || opt["except"]) 
     files = opt[:require_as] || opt["require_as"] || name 
     files = [files] unless files.respond_to?(:each) 

     return unless !only || only.any? {|e| e == @env } 
     return if except && except.any? {|e| e == @env } 

     if files = opt[:require_as] || opt["require_as"] 
      files = Array(files) 
      files.each { |f| require f } 
     else 
      begin 
      require name 
      rescue LoadError 
      # Do nothing 
      end 
     end 
     yield if block_given? 
     true 
     end 
     private 
     def _combine_only(only) 
     return @only unless only 
     only = [only].flatten.compact.uniq.map { |o| o.to_s } 
     only &= @only if @only 
     only 
     end 
     def _combine_except(except) 
     return @except unless except 
     except = [except].flatten.compact.uniq.map { |o| o.to_s } 
     except |= @except if @except 
     except 
     end 
    end 
    context.new(env && env.to_s).instance_eval(File.read(@gemfile), @gemfile, 1) 
    end 
end 

module Gem 
    @loaded_stacks = Hash.new { |h,k| h[k] = [] } 

    def source_index.refresh! 
    super 
    Bundler.add_specs_to_index 
    end 
end 

但是,当我尝试访问任何我的宝石,例如中MongoMapperPaperclipHaml,等我得到:

NameError: uninitialized constant MongoMapper 

这同样适用于任何其他宝石。 Bundler是否不包含旧的Rails 2.0那样的宝石?或者是我的系统搞砸了?

任何帮助将不胜感激,谢谢!

回答

3

您需要升级到Bundler上的最新版本。一旦你这样做,删除以前的版本有快速gem cleanup,解决您的Gemfile,然后做一个bundle lock然后将下面的代码添加到config/preinitializer.rb文件:

begin 
    # Require the preresolved locked set of gems. 
    require File.expand_path('../.bundle/environment', __FILE__) 
rescue LoadError 
    # Fallback on doing the resolve at runtime. 
    require "rubygems" 
    require "bundler" 

    Bundler.setup 
end 

# Auto-require all bundled libraries. 
Bundler.require 
相关问题