2010-10-15 48 views
1

Bundler正在打破我的機智之路!Bundler破壞足智多謀的路線?

爲了確認我創建了一個乾淨的rails應用程序(2.3.4)並製作了一個users腳手架。

map.resources :users創建如下:

users GET /users(.:format)     {:controller=>"users", :action=>"index"} 
      POST /users(.:format)     {:controller=>"users", :action=>"create"} 
new_user GET /users/new(.:format)    {:controller=>"users", :action=>"new"} 
edit_user GET /users/:id/edit(.:format)   {:controller=>"users", :action=>"edit"} 
    user GET /users/:id(.:format)    {:controller=>"users", :action=>"show"} 
      PUT /users/:id(.:format)    {:controller=>"users", :action=>"update"} 
      DELETE /users/:id(.:format)    {:controller=>"users", :action=>"destroy"} 

現在我按照說明在http://gembundler.com/rails23.html和所有的突然我的路線爆發:

users GET /users(.:format)     {:action=>"index", :controller=>"users"} 
      GET /users(.:format)     {:action=>"index", :controller=>"users"} 
new_user GET /users/new(.:format)    {:action=>"index", :controller=>"users"} 
edit_user GET /users/:id/edit(.:format)   {:action=>"index", :controller=>"users"} 
    user GET /users/:id(.:format)    {:action=>"index", :controller=>"users"} 
      GET /users/:id(.:format)    {:action=>"index", :controller=>"users"} 
      GET /users/:id(.:format)    {:action=>"index", :controller=>"users"} 

插入和從config/boot.rb休息和修復刪除代碼塊,分別是我的路線!有人有主意嗎??

這會是很長......的boot.rb:

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

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.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 
     min_version = '1.3.2' 
     require 'rubygems' 
     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 

class Rails::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 

# All that for this: 
Rails.boot! 

preinitializer.rb

begin 
    require "rubygems" 
    require "bundler" 
rescue LoadError 
    raise "Could not load the bundler gem. Install it with `gem install bundler`." 
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 

的Gemfile

source "http://rubygems.org" 
source "http://gemcutter.org" 

gem "rails", "2.3.4" 
gem "newrelic_rpm" 
gem "authlogic" 
gem "geokit" 
gem "will_paginate" 
gem "paperclip" 
gem "delayed_job" 
gem "delayed_paperclip" 
gem "activemerchant", :require => "active_merchant" 
gem "aws-s3", :require => "aws/s3" 
gem "acts_as_archive" 
gem "carmen" 
gem "super_exception_notifier", :require => "exception_notification" 
gem "bitly" 
gem "thinking-sphinx", :require => "thinking_sphinx" 
gem "ts-delayed-delta", :require => "thinking_sphinx/deltas/delayed_delta" 
gem "deep_merge" 
gem "acts_as_taggable_on_steroids" 
gem "whenever" 
gem "ar-extensions" 
gem "fastercsv" 

的routes.rb

ActionController::Routing::Routes.draw do |map| 
    map.resources :users 

    map.connect ':controller/:action/:id' 
    map.connect ':controller/:action/:id.:format' 
end 
+0

在你之前的問題中,你說過你使用rails 2.3.8,但在這個問題中你說2.3.4。在捆綁器說明中,它至少需要2.3.5。你能確認你使用這個應用程序的鋼軌版本嗎? – 2010-10-15 05:56:47

+0

其實我已經試過2.3.4,2.3.5,2.3.8都無濟於事...... – 2010-10-15 06:02:12

+0

雖然它很長,但它也有助於查看你的boot.rb,preinitializer.rb,Gemfile和routes.rb文件。我重新創建了一個2.3.4應用程序,並按照您所鏈接的說明操作,並且我沒有收到您所做的路由錯誤。我想知道是否某個地方有錯字是cuplrit。 – 2010-10-15 06:02:39

回答

1

deep_merge是造成問題的寶石。捆綁器本身沒有它就能正常工作。

+0

哇!你是對的!!!嗯mmmm ....任何想法,爲什麼這將是?? – 2010-10-15 06:55:33

+0

deep_merge和deep_merge!哈希方法已經存在,並且它們被這個gem覆蓋。這是有道理的,因爲當使用gem時,你的路由哈希被重新排序。 'rake routes'通常首先顯示控制器,然後是動作,但是deep_merge將其翻轉。無論如何,你確定你需要它嗎?路由中的某些東西正在使用deep_merge,並期待rails的默認版本。寶石破壞了鐵軌的期望。 – 2010-10-15 07:01:55

+0

ahhhhh解釋了這一切......說實話,我並不知道rails已經有了deep_merge函數。所以我其實不確定我需要寶石。 (儘管如果方法已經存在,我也想不出爲什麼會創建寶石...)。我將不得不嘗試默認的deep_merge方法,看看它們是否適合我需要的東西!非常感謝!我不認爲我會永遠不會解決這個問題:)得愛所以! – 2010-10-15 07:07:31