неинициализированная константа ActionController::Dispatcher::MiddlewareStack

Я установил несколько новых гемов для тестирования и столкнулся с неинициализированной постоянной ошибкой 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

person sutee    schedule 01.05.2009    source источник
comment
Я думаю, это связано со строкой require 'has_many_polymorphs'. Я гуглил совместимость has_many_polymorphs с rails 2.3.2, но не нашел ничего определенного.   -  person sutee    schedule 01.05.2009
comment
Вы пробовали устанавливать по одному гему за раз? Кроме того, вы можете захотеть создать новый секрет, раз уж вы поделились им со всеми нами :P.   -  person allyourcode    schedule 02.05.2009


Ответы (4)


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

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

person Ric8ard    schedule 03.05.2009
comment
Это сработало для меня, хотя это противоречит документации has_many_polymorphs. - person Bryan Ward; 21.07.2009

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

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

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

"johnsbrn-has_many_polymorphs/lib/has_many_polymorphs/autoload.rb"

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

требовать 'action_controller/middleware_stack', если он не определен? ::ActionController::Стек промежуточного ПО

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

требуется «инициализатор», если он не определен? ::Rails::Инициализатор

требовать 'action_controller/middleware_stack', если он не определен? ::ActionController::Стек промежуточного ПО

требовать 'action_controller/dispatcher', если он не определен? ::ActionController::Диспетчер

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

person Community    schedule 05.08.2009
comment
ой - Извините за это. Еще не успел попробовать его в рабочем режиме (долгий цикл разработки!) - person Ric8ard; 12.08.2009

в окружении.rb:

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

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

person ehaselwanter    schedule 24.01.2010

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

person Max Williams    schedule 02.02.2010