La storia finora:come risolvere Rails modello dello spazio dei nomi di collisione
Ho un app rotaie con un modello denominato "Term". Tutto va bene fino a quando non tenterai di installare Cucumber. Al momento l'esecuzione
rake cucumber
ottengo
Term is not a class (TypeError)
Questo accade perché cetriolo include un altro gioiello, 'termine-ANSIColor' (per fare l'output di testo colorato abile nella console), e la durata-ANSIColor definisce un modulo denominato "Termine". Cucumber include termini ansicolor prima di includere i modelli Rails, quindi "Term" è già definito come modulo durante il caricamento del modello "Term". I moduli e le classi di livello superiore non possono avere lo stesso nome in Ruby, quindi la collisione.
Preferendo non rinominare il modello, ho deciso di applicare il termine gemma ansicolor. Questo si è rivelato più difficile di quanto pensassi. Ho cambiato il nome del modulo Term in "ANSITerm", ma non riesco a capire come ottenere da Cucumber il mio gioiello modificato, che ho inserito in RAILS_ROOT/vendor/gems/term-ansicolor.
Qualche idea? Sto abbaiando dall'albero sbagliato?
Ho appena imbattuto in questo esatto * * problema, ho un modello denominato Term come bene e cetriolo appena installato. Per fortuna ho cercato quell'errore prima di passare ore a cercare di capire cosa stava succedendo! Grazie mille per aver postato questo, seguirò la tua soluzione! – carols10cents
Sono contento che sia stato utile. Tieni presente che devi mantenere aggiornate le tue gemme patchate, quindi rinominare il modello potrebbe essere più semplice. – zetetic
Ho effettivamente commentato questo bug di cetriolo qui: https://rspec.lighthouseapp.com/projects/16211-cucumber/tickets/489 e sto lavorando per ottenere il vostro termine patch-ansicolor da github integrato con un cetriolo rattoppato in modo che non dobbiamo mantenere la gemma rattoppata; ma sì, ho ribattezzato il mio modello nel frattempo. – carols10cents