Pergunta

Vamos dizer em uma aplicação Rails você tem algumas jóias que você usa no seu aplicativo (vamos chamá-los de " gemas primárias ") e você tem vendorizadas-los para portabilidade.

Vamos dizer que aqueles " gemas primárias " também exigem gemas de seus próprios -. Vamos chamar esses " gemas secundárias "

Quando você estiver configurando o seu environment.rb, você tem a dizer:

config.gem 'primary-gem'

para qualquer das jóias que você está usando diretamente.

Mas, você também precisa dizer. . .

config.gem 'secondary-gem'

mesmo se você não está usando esse gem explicitamente em seu aplicativo?

Ou é simplesmente o suficiente para incluir a jóia em sua vendor/gems diretório para que são apanhados por seu aplicativo?

Foi útil?

Solução

Ao implantar tempo trilhos sabe sobre suas dependências, então se você quiser congelar os gems, então você pode executar

rake gems:unpack:dependencies

para congelá-los para o diretório fornecedor.

Em tempo de execução no entanto, é o trabalho gemas para carregá-lo de dependências, e, geralmente, as gemas fazer isso, então a config.gem 'primário' deve funcionar.

Outras dicas

Não, você não ou pelo menos você não deve. Cada especificação GEM deve incluir a sua própria lista de dependências. Quando gem principal é instalado, RubyGems automaticamente irá instalar cada dependência gem em cascata.

Em outras palavras, se um requer B que requer C + D, você só precisa escrever

config.gem 'A'

Quando o comando

gem install A

é executado, RubyGems irá resolver todas as dependências e instalá-los. Você pode ver todas as dependências um running (a partir de um projeto Rails)

rake gems

Às vezes, um autor GEM pode se esqueça de incluir algumas dependências GEM na especificação. Neste caso, você deve especificá-los em seu environment.rb para forçar o aplicativo para instalá-los. Fora do curso, também é uma boa idéia entrar em contato com o mantenedor do GEM para que ele possa resolver o problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top