2014-06-16 16 views
24

Mam pewien moduł, który jest używany w aplikacji Rails 4.1.1Nie można zdefiniować wiele „włączone” bloki dla koncernu (ActiveSupport :: Troska :: MultipleIncludedBlocks) z cache_classes = true

module A 
    extend ActiveSupport::Concern 
    included do 
    #Some code 
    end 
end 

co jest zawarte w klasie

class Some 
    include A 
end 

działa to doskonale z cache_classes=true w application.rb. Teraz, jeśli wyłączę buforowanie klas, otrzymuję Cannot define multiple 'included' blocks for a Concern (ActiveSupport::Concern::MultipleIncludedBlocks) wyjątek upson uruchamiający serwer.

Jak radzić sobie z takim problemem, ponieważ ponowne ładowanie zajęć odbywa się za pomocą Rails?

Odpowiedz

37

Dla każdego, kto uderza w tę samą ścianę, rozwiązaniem jest ścisłe przestrzeganie reguł samoładowania Railsów. To jest

  1. Usuwanie wszystkich require/require_relative
  2. Dodawaj potrzebne ścieżki do ścieżki Szyny autoLoad
  3. pliki umieścić w odpowiednich miejscach z odpowiednimi nazwami tak Szyny można wywnioskować, gdzie szukać kodu do załadowania.

Więcej informacji tutaj: https://github.com/rails/rails/issues/15767

+1

Dzięki próbuje polować to w dół na chwilę. Zainstalowałem libację w trosce i zacząłem otrzymywać ten błąd –

+0

Dla projektu, w którym się znajduję, moduł był jawnie wymagany w pliku (oprócz tego, że znajduje się w ścieżce automatycznego ładowania). Zaczęliśmy mieć ten problem podczas korzystania z Sidekiq. Rozwiązaniem było usunięcie jawnych wywołań do modułu. –

+1

Miałem również problem, w którym jedna z moich nazw modułów/nazw przestrzeni kończyła się na 's' i uważam, że nie działała dobrze z pluralizacją Railsów, ponieważ po prostu zmieniała nazwę modułu na singluar. –