Dotychczasowa historia:Jak rozwiązać kolizję przestrzeni nazw modelu szyny
Mam aplikację szyny z modelem o nazwie "Term". Wszystko dobrze, dopóki nie spróbujesz zainstalować ogórka. Po uruchomieniu
rake cucumber
uzyskać
Term is not a class (TypeError)
Dzieje się tak dlatego, ogórek zawiera inny klejnot, 'Term-ansicolor' (zrobić fajną kolorową wyjście tekstu w konsoli), a termin-ansicolor definiuje moduł o nazwie "Term". Ogórek zawiera termin-ansicolor przed włączeniem modeli Rails, dlatego "Term" jest już zdefiniowany jako moduł podczas ładowania modelu "Term". Najwyższego poziomu moduły i klasy nie mogą mieć tych samych nazw w Ruby, a więc kolizji.
Nie chcąc zmienić nazwy modelu, ustawiam łatanie klejnotu term-ansicolor. To okazało się trudniejsze, niż myślałem. Zmieniłem nazwę modułu Term na "ANSITerm", ale nie mogę wymyślić, jak uzyskać Cucumber, aby załadował zmodyfikowany klejnot, który umieściłem w RAILS_ROOT/vendor/gems/term-ansicolor.
Wszelkie pomysły? Czy szczerzę złe drzewo?
po prostu wpadł na ten dokładny * * problem, mam model nazwany Term, jak również i po prostu zainstalowany ogórka. Dobrze, że szukałem tego błędu, zanim spędziłem godziny próbując dowiedzieć się, co się dzieje! Dziękuję bardzo za opublikowanie tego, będę podążał za twoim rozwiązaniem! – carols10cents
Cieszę się, że to było pomocne. Pamiętaj, że musisz utrzymywać łatane klejnoty do przodu, więc zmiana nazwy modelu może być łatwiejsza. – zetetic
Naprawdę skomentowałem ten błąd z ogórkiem tutaj: https://rspec.lighthouseapp.com/projects/16211-cucumber/tickets/489 i pracuję nad otrzymaniem poprawionego terminu-ansicolor z github zintegrowanego z poprawionym ogórkiem abyśmy nie musieli utrzymywać łatanego klejnotu; ale tak, zmieniłem nazwę mojego modelu w międzyczasie. – carols10cents