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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top