config.gem in environment.rb
-
06-07-2019 - |
Domanda
Diciamo che in un'app di Rails hai alcune gemme che usi nella tua app (le chiameremo " gemme primarie ") e hai venduto loro per portabilità.
Supponiamo che quelle " gemme primarie " richiedono anche gemme proprie: le chiameremo " gemme secondarie " ;.
Quando stai configurando environment.rb, devi dire:
config.gem 'primary-gem'
per qualsiasi gemma che stai usando direttamente.
Ma devi anche dirlo. . .
config.gem 'secondary-gem'
anche se non stai usando quella gemma esplicitamente nella tua app?
O è semplicemente sufficiente includere la gemma nella tua vendor/gems
affinché possa essere raccolta dalla tua app?
Soluzione
Al momento della distribuzione, le rotaie conoscono le tue dipendenze, quindi se vuoi congelare le tue gemme puoi correre
rake gems:unpack:dependencies
per congelarli nella directory del fornitore.
In fase di esecuzione, tuttavia, è compito delle gemme caricare le sue dipendenze, e di solito le gemme lo fanno, quindi un config.gem 'primario' dovrebbe funzionare.
Altri suggerimenti
No, non è così o almeno non dovresti. Ogni specifica GEM dovrebbe includere il proprio elenco di dipendenze. Quando viene installata la gemma primaria, RubyGems installerà automaticamente ogni dipendenza gemma su cascata.
In altre parole, se A richiede B che richiede C + D, devi solo scrivere
config.gem 'A'
Quando il comando
gem install A
viene eseguito, RubyGems risolverà tutte le dipendenze e le installerà. Puoi visualizzare tutte le dipendenze A in esecuzione (da un progetto Rails)
rake gems
A volte, un autore GEM potrebbe dimenticare di includere alcune dipendenze GEM nelle specifiche. In questo caso, è necessario specificarli nel proprio ambiente.rb per forzare l'applicazione a installarli. Ovviamente, è anche una buona idea contattare il manutentore di GEM in modo che possa risolvere il problema.