2011-12-13 60 views
1

我在rails 2.3.5和ruby 1.8.7似乎無法讓捆綁器使用rails 2.3

我一直試圖運行bundler命令,它似乎不再工作。

我不斷收到

undefined method `[]' for nil:NilClass (NoMethodError) 

這裏是跟蹤時,運行捆綁安裝

/Users/eric/.rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.21/lib/bundler/settings.rb:11:in `[]': undefined method `[]' for nil:NilClass (NoMethodError) 
    from /Users/eric/.rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.21/lib/bundler/cli.rb:215:in `install' 
    from /Users/eric/.rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.21/lib/bundler/cli.rb:325:in `package' 
    from /Users/eric/.rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.21/lib/bundler/vendor/thor/task.rb:22:in `send' 
    from /Users/eric/.rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.21/lib/bundler/vendor/thor/task.rb:22:in `run' 
    from /Users/eric/.rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.21/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task' 
    from /Users/eric/.rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.21/lib/bundler/vendor/thor.rb:263:in `dispatch' 
    from /Users/eric/.rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.21/lib/bundler/vendor/thor/base.rb:386:in `start' 
    from /Users/eric/.rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.21/bin/bundle:13 
    from /Users/eric/.rvm/gems/ruby-1.8.7-p352/bin/bundle:19:in `load' 
    from /Users/eric/.rvm/gems/ruby-1.8.7-p352/bin/bundle:19 

這是當我嘗試啓動服務器會發生什麼。

/Users/sgedeveloper/.rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.21/lib/bundler/settings.rb:11:in `[]': undefined method `[]' for nil:NilClass (NoMethodError) 
     from /Users/sgedeveloper/.rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.21/lib/bundler.rb:261:in `configure_gem_home_and_path' 
     from /Users/sgedeveloper/.rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.21/lib/bundler.rb:82:in `configure' 
     from /Users/sgedeveloper/.rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.21/lib/bundler.rb:136:in `definition' 
     from /Users/sgedeveloper/.rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.21/lib/bundler.rb:126:in `load' 
     from /Users/sgedeveloper/.rvm/gems/ruby-1.8.7-p352/gems/bundler-1.0.21/lib/bundler.rb:110:in `setup' 
     from ./script/../config/../config/preinitializer.rb:23 
     from ./script/../config/boot.rb:29:in `load' 
     from ./script/../config/boot.rb:29:in `preinitialize' 
     from ./script/../config/boot.rb:11:in `boot!' 
     from ./script/../config/boot.rb:118 
     from ./script/server:2:in `require' 
     from ./script/server:2 

這裏是Preinitialize.rb

begin 
     require "rubygems" 
     require "bundler" 
    rescue LoadError 
     raise "Could not load the bundler gem. Install it with `gem install bundler`." 
    end 

    begin 
     gem 'i18n', "~> 0.4.0" 
    rescue LoadError 
     raise 'Could not find i18n Gem' 
    end 


    if Gem::Version.new(Bundler::VERSION) <= Gem::Version.new("0.9.24") 
     raise RuntimeError, "Your bundler version is too old for Rails 2.3." + 
     "Run `gem install bundler` to upgrade." 
    end 

    begin 
     # Set up load paths for all bundled gems 
     ENV["BUNDLE_GEMFILE"] = File.expand_path("../../Gemfile", __FILE__) 
     Bundler.setup 
    rescue Bundler::GemNotFound 
     raise RuntimeError, "Bundler couldn't find some gems." + 
     "Did you run `bundle install`?" 
    end 

這裏的boot.rb

# Don't change this file! 
    # Configure your app in config/environment.rb and config/environments/*.rb 
    require 'thread' 

    RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT) 

    module Rails 
    class << self 
     def boot! 
     unless booted? 
      preinitialize 
      pick_boot.run 
     end 
     end 

     def booted? 
     defined? Rails::Initializer 
     end 

     def pick_boot 
     (vendor_rails? ? VendorBoot : GemBoot).new 
     end 

     def vendor_rails? 
     File.exist?("#{RAILS_ROOT}/vendor/rails") 
     end 

     def preinitialize 
     load(preinitializer_path) if File.exist?(preinitializer_path) 
     end 

     def preinitializer_path 
     "#{RAILS_ROOT}/config/preinitializer.rb" 
     end 
    end 

    class Boot 
     def run 
     load_initializer 

     Rails::Initializer.class_eval do 
      def load_gems 
      @bundler_loaded ||= Bundler.require :default, Rails.env 
      end 
     end 

     Rails::Initializer.run(:set_load_path) 
     end 
    end 

    class VendorBoot < Boot 
     def load_initializer 
     require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer" 
     Rails::Initializer.run(:install_gem_spec_stubs) 
     Rails::GemDependency.add_frozen_gem_path 
     end 
    end 

    class GemBoot < Boot 
     def load_initializer 
     self.class.load_rubygems 
     load_rails_gem 
     require 'initializer' 
     end 

     def load_rails_gem 
     if version = self.class.gem_version 
      gem 'rails', version 
     else 
      gem 'rails' 
     end 
     rescue Gem::LoadError => load_error 
     $stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.) 
     exit 1 
     end 

     class << self 
     def rubygems_version 
      Gem::RubyGemsVersion rescue nil 
     end 

     def gem_version 
      if defined? RAILS_GEM_VERSION 
      RAILS_GEM_VERSION 
      elsif ENV.include?('RAILS_GEM_VERSION') 
      ENV['RAILS_GEM_VERSION'] 
      else 
      parse_gem_version(read_environment_rb) 
      end 
     end 

     def load_rubygems 
      require 'rubygems' 
      min_version = '1.3.1' 
      unless rubygems_version >= min_version 
      $stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.) 
      exit 1 
      end 

     rescue LoadError 
      $stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org) 
      exit 1 
     end 

     def parse_gem_version(text) 
      $1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/ 
     end 

     private 
      def read_environment_rb 
      File.read("#{RAILS_ROOT}/config/environment.rb") 
      end 
     end 
    end 
    end 

    # All that for this: 
    Rails.boot! 
+0

你是否對Gemfile做過任何修改?你在運行什麼bundler命令? –

+0

沒有對我的Gemfile進行更改,但我的Gemfile.lock被刪除。 – ericraio

+0

被刪除?你沒有使用版本控制嗎?!?!? –

回答

2

修改了.bundle/config文件是什麼原因造成這個錯誤。

+0

Wao。謝謝。確實,修改.config導致了我的問題。 – Rafael