неинициализированная константа ActionController :: Dispatcher :: MiddlewareStack - PullRequest
1 голос
/ 01 мая 2009

Я установил несколько новых гемов для тестирования и столкнулся с неинициализированной константой ошибки ActionController :: Dispatcher :: MiddlewareStack. Я следовал инструкциям для gem rdocs, указав зависимость gem в моем файле environment.rb, а затем запустил rake gems: install и rake gems: unpack.

Я также скопировал по своему файлу environment.rb одну строку за раз в другой проект, но не получил ошибку. Мне было интересно, что еще может пойти не так.

Вот более длинная версия ошибки (я впервые столкнулся с ошибкой при выполнении простого теста; то же самое происходит в консоли, когда мне требуется 'active_support'):

$ ruby test/unit/user_test.rb 
** has_many_polymorphs: rails environment detected
/Users/thaiyoshi/.gem/ruby/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:105:in `const_missing': uninitialized constant ActionController::Dispatcher::MiddlewareStack (NameError)
    from /Users/thaiyoshi/.gem/ruby/1.8/gems/actionpack-2.3.2/lib/action_controller/dispatcher.rb:71
    from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /Users/thaiyoshi/.gem/ruby/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require'
    from /Users/thaiyoshi/.gem/ruby/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:521:in `new_constants_in'
    from /Users/thaiyoshi/.gem/ruby/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require'
    from /Users/thaiyoshi/.gem/ruby/1.8/gems/has_many_polymorphs-2.13/lib/has_many_polymorphs/autoload.rb:2
    from /opt/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
     ... 8 levels...
    from ./test/unit/../test_helper.rb:2:in `require'
    from ./test/unit/../test_helper.rb:2
    from test/unit/user_test.rb:1:in `require'
    from test/unit/user_test.rb:1

Вот мой файл environment.rb (комментарии по умолчанию удалены):

RAILS_GEM_VERSION = '2.3.2' unless defined? RAILS_GEM_VERSION
# config.gem 'has_many_polymorphs', :version => "2.12"
# require ‘has_many_polymorphs‘

# Bootstrap the Rails environment, frameworks, and default configuration

require File.join(File.dirname(__FILE__), 'boot')
require 'has_many_polymorphs' 
require 'active_support'

Rails::Initializer.run do |config|

  config.time_zone = 'UTC'


  config.gem "thoughtbot-factory_girl",
             :lib    => "factory_girl",
             :source => "http://gems.github.com"


   config.gem 'thoughtbot-shoulda',
              :lib => false,
              :source => 'http://gems.github.com'

end

Ответы [ 4 ]

2 голосов
/ 03 мая 2009

Ранее я писал некоторую ошибочную информацию, однако теперь мне удалось сесть и посмотреть на нее в течение нескольких минут, исправить проблему, отредактировав файл environment.rb и переместив require 'has_many_polymorphs ' оператор для после блока инициализатора.

Бинго. Я ладонями трудно , но это то, как мы учимся ..

1 голос
/ 05 августа 2009

Некоторое время мы следили за этой веткой - ответ вышеупомянутого письма работал на нас в разработке, но переключение в производственный режим привело к ошибке. Поместить требование обратно над блоком инициализатора и использовать оригинальное исправление Рика работало нормально. Его правка убрала его - так что для всех, кто следит за этим, вот оно снова: BTW - теперь мы используем trunk на hmp, а не на ветви johnsbrn, и это, кажется, работает нормально с 2.3.2 теперь

edit: Это почти исправило проблему для меня. Впоследствии я обнаружил, что миграция порвала с аналогичной проблемой. Просматривая код, я быстро взломал ответ, который требовал пропустить класс (action_controller / middleware_stack).

Быстрое и грязное исправление - отредактировать файл по относительному пути:

"johnsbrn-has_many_polymorphs / Библиотека / has_many_polymorphs / autoload.rb"

и вставить следующую строку между первыми двумя обязательными строками:

требует 'action_controller / middleware_stack', если не определено? :: ActionController :: MiddlewareStack

например. В конечном итоге это выглядит так:

требует 'инициализатор', если не определено? :: Рельсы :: Initializer

требуется 'action_controller / middleware_stack', если не определено? :: ActionController :: MiddlewareStack

требуется 'action_controller / dispatcher', если не определено? :: ActionController :: грузоотправитель

и теперь все работает нормально.

0 голосов
/ 02 февраля 2010

В случае, если кто-то еще зайдет на эту страницу, как я, я решил эту проблему, просто обновив гем has_many_polymorphs с 1.12.1 до 1.13 и повторно заморозив его в своей папке vendor (и обновив строку config.gem в среде. используйте новый номер версии).

0 голосов
/ 24 января 2010

в среде. Rb:

require File.join(File.dirname(__FILE__), 'boot')
require 'action_controller/middleware_stack' unless defined? ::ActionController::MiddlewareStack
require 'has_many_polymorphs'

у меня работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...