2010-10-15 2 views
1

Bundler нарушает мой находчивый маршрут!Bundler разбивает находчивые маршруты?

Чтобы подтвердить, что я создал приложение для чистых рельсов (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

В предыдущем вопросе вы сказали, что используете рельсы 2.3.8, но в этом вопросе вы говорите 2.3.4. В инструкциях связки требуется не менее 2.3.5. можете ли вы подтвердить, какую версию рельсов вы используете для этого приложения? –

+0

на самом деле я пробовал 2.3.4, 2.3.5, 2.3.8 все безрезультатно ... –

+0

Пока он длинный, это также поможет увидеть ваши boot.rb, preinitializer.rb, Gemfile и routes.rb файлы. Я воссоздал приложение 2.3.4 и следил за инструкциями, с которыми вы связались, и я не получаю ошибки маршрутизации, которые вы сделали. Мне интересно, есть ли где-нибудь окуляр. –

ответ

1

deep_merge - это камень, который вызывает проблему. Сам комплектщик отлично работает без него.

+0

эй! ты прав!!! hmmmmmmm .... любые идеи, почему это было бы? –

+0

deep_merge и deep_merge! Хэш-методы уже существуют, и они перезаписываются этим камнем. Это имеет смысл, потому что, когда используется драгоценный камень, хеши маршрута перенаправляются. «rake routes» обычно показывает контроллер сначала, а затем действие, но deep_merge перевернул это. В любом случае, вы уверены, что вам это нужно? Что-то в маршрутизации использует deep_merge и ожидает версию по умолчанию для rails. Драгоценный камень разрушает то, что ожидает рельсы. –

+0

ahhhhh, который объясняет все это ... если честно, я не знал, что у рельсов уже есть функции deep_merge. поэтому я действительно не уверен, что мне нужен драгоценный камень. (хотя я также не могу придумать, почему камень будет создан, если методы уже существуют ...). я должен попробовать методы по умолчанию deep_merge и посмотреть, работают ли они на то, что мне нужно! большое спасибо!я не думаю, что я бы когда-либо решил это сам :) Gotta love SO! –

Смежные вопросы