2010-10-15 3 views
1

Bundler brise ma route pleine de ressources!Bundler casse les routes ingénieuses?

Pour confirmer que j'ai créé une application de rails propres (2.3.4) et que j'ai créé un échafaudage users.

map.resources :users crée les éléments suivants:

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"} 

Maintenant j'ai suivi les instructions à http://gembundler.com/rails23.html et tout à coup mes routes cassé:

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"} 

Insertion et retrait du bloc de code de config/boot.rb pauses et des correctifs , respectivement, mes routes! Quelqu'un a des idées?

Ça va être longue ... 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

Dans votre question précédente, vous avez dit que vous utilisiez les rails 2.3.8, mais dans cette question, vous dites 2.3.4. Dans les instructions bundler, il faut au moins 2.3.5. Pouvez-vous confirmer quelle version des rails vous utilisez pour cette application? –

+0

en fait, j'ai essayé 2.3.4, 2.3.5, 2.3.8 tous en vain ... –

+0

Alors que c'est long, il serait également utile de voir votre boot.rb, preinitializer.rb, Gemfile, et routes.rb des dossiers. J'ai recréé une application 2.3.4 et j'ai suivi les instructions auxquelles vous étiez lié, et je ne reçois pas les erreurs de routage que vous avez faites. Je me demande si une faute de frappe quelque part est le cuplrit. –

Répondre

1

deep_merge est la gemme à l'origine du problème. bundler lui-même fonctionne très bien sans elle.

+0

whoa! tu as raison!!! hmmmmmmm .... des idées pourquoi ce serait ?? –

+0

le deep_merge et deep_merge! Les méthodes de hachage existent déjà, et elles sont remplacées par cette gemme. Cela est logique, car lorsque la gemme est utilisée, vos hachages de route sont réordonnés. 'rake routes' montre normalement le contrôleur en premier, puis l'action, mais deep_merge l'a retourné. De toute façon, êtes-vous sûr de l'avoir besoin? Quelque chose dans le routage utilise deep_merge et attend la version par défaut des rails. La gemme brise ce que les rails attendent. –

+0

ahhhhh qui explique tout cela ... pour être honnête, je ne savais pas que les rails avaient déjà des fonctions deep_merge. alors je ne suis pas sûr que j'ai besoin de la gemme. (bien que je ne peux pas non plus imaginer pourquoi la gemme serait créée si les méthodes existent déjà ...). Je vais devoir essayer les méthodes par défaut deep_merge et voir si elles fonctionnent pour ce dont j'ai besoin! Merci beaucoup!Je ne pense pas que j'aurais jamais résolu celui-ci par moi-même :) dois aimer SO! –