Подтвердить что ты не робот

Копия ApplicationController была удалена из дерева модулей, но все еще активна

Когда два совпадающих HTTP-запроса переходят в мое приложение Rails, второй всегда возвращает следующую ошибку:

Копия ApplicationController была удалена из дерева модулей, но все еще активна!

Оттуда он дает бесполезную трассировку стека в результате того, что "мы прошли стандартную загрузку сервера, запустили ваш первый before_filter на ApplicationController (и я проверил, он только в зависимости от того, какой фильтр запускается первым)", а затем предлагает следующее:

/home/matchu/rails/torch/vendor/rails/activesupport/lib/active_support/dependencies.rb:414:in `Load_missing_constant '

/home/matchu/rails/torch/vendor/rails/activesupport/lib/active_support/dependencies.rb:96:in `Const_missing '

который я предполагаю, является общим ответом и не очень много говорит.

Google, похоже, говорит мне, что люди, разрабатывающие Rails Engines, столкнутся с этим, но я этого не делаю. Все, что я сделал, - это обновить приложение Rails от 2.2 (2.1?) До 2.3.

Каковы возможные причины этой ошибки и как я могу отслеживать, что происходит на самом деле? Я знаю, что этот вопрос неопределен, так же как и любая другая информация будет полезной?

Что еще более важно: я попытался выполнить пробный запуск в "производственной" среде только сейчас, и ошибка, похоже, не сохраняется. Значит ли это только влияет на развитие, и мне не нужно слишком беспокоиться?

4b9b3361

Ответ 1

Это ошибка в Rails 2.3.3:

Есть ли патч для него (но неполный?) в 2-3-стабильный:

У вас есть несколько вариантов решения проблемы:

  • Вернитесь к Rails 2.3.2, подождите, пока выйдет 2.3.4, возможно, в конце августа. 2.3.3 имеет пару плохих проблем, так что это может быть лучше.
  • Проблема не должна возникать в режиме производства, и это не произойдет в режиме разработки под Thin server. Если у вас возникла эта проблема в Google Engines в режиме производства, патч - ваша единственная надежда. Если это только в режиме dev, вы можете просто запустить локальный сервер с Thin вместо Mongrel.
  • Если это Google Engines, , вы можете перейти от Google Двигателей и разместить свое приложение другим способом. Это похоже на большую работу.

Удачи, это очень плохая ошибка, с которой сталкиваются многие люди.

Ответ 2

В дополнение к обходным решениям, упомянутым в других ответах, я столкнулся с двумя другими:

  • Добавьте файл config.cache_classes = false в файл config/environment/development.rb. У этого есть неудачный побочный эффект, требующий, чтобы вы перезагружали свой сервер всякий раз, когда хотите увидеть свои изменения.
  • Добавьте "выгружаемый" внутри классов вашего контроллера в ваш движок. См. http://strd6.com/?p=250 и http://dev.rubyonrails.org/ticket/6001

Я не пробовал второй подход, так как сначала нашел другое решение, но, конечно же, есть компромисс между тем, чтобы не изменять код плагина, который может быть отменен, если загружена более новая версия плагина, а затем легкость разработки, обеспечиваемая необходимостью перезапуска сервера разработки все время во втором решении.

Ответ 3

i столкнулся с той же проблемой для моего нового движка на рельсах 2.3.4, и я нашел решение здесь.

вызов unloadable метод решил мою проблему.

Ответ 4

Weird.

Попробуйте запустить "rake rails: update", чтобы убедиться, что скрипты в конфигах обновлены. Возможно, вам придется проверить существующие на применение шаблона.

Ответ 5

У меня была эта ошибка, и из памяти это была одна из трех вещей, которые ее исправили.

1) Мне нужно было обновить mongrel/rack 2) У меня была переменная окружения от спокойной проверки подлинности, которую я переместил в файлы production.rb и development.rb из среды. Rb - переместив ее обратно в environment.rb, похоже, помог 3) will_paginate устарела

Ответ 6

Мы обратились к модели activerecord в модуле с именами, который переопределяет метод класса name. Rails ожидает, что метод name возвращает Product:: Categories:: MilkProducts:: Firstproduct, но получает только FirstProduct и выдает ошибку. Поэтому, если вы получите эту ошибку, сначала проверьте, не переопределено ли вы self.name.

  • Firstproduct.method(: name).owner должен быть Module
  • Firstproduct.method(: имя).source_location

Источник:

module Product::Categories::MilkProducts
  class Base
    def self.name
      self.to_s.demodulize
    end
  end
  class Firstproduct < Base
    self.product = Product.first
  end
end