Копия ApplicationController была удалена из дерева модулей, но все еще активна - PullRequest
17 голосов
/ 07 августа 2009

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

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

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

/ дома / matchu / рельсы / факел / поставщик / Рельсы / ActiveSupport / Библиотека / active_support / dependencies.rb: 414: в `Load_missing_constant '

/ дома / matchu / рельсы / факел / поставщик / Рельсы / ActiveSupport / Библиотека / active_support / dependencies.rb: 96: в `Const_missing '

Я предполагаю, что это общий ответ, и он мало что говорит.

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

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

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

Ответы [ 6 ]

8 голосов
/ 07 августа 2009

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

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

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

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

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

1 голос
/ 14 ноября 2009

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

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

1 голос
/ 05 ноября 2009

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

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

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

0 голосов
/ 29 марта 2011

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

  • Firstproduct.method (: name). Владелец должен быть Модуль
  • 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
0 голосов
/ 07 августа 2009

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

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

0 голосов
/ 07 августа 2009

Weird.

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

...