Вопрос

Допустим, в приложении Rails у вас есть несколько гемов, которые вы используете в своем приложении (мы будем называть их первичные гемы "), и вы продали их для мобильности.

Допустим, эти " первичные гемы " также требуются собственные драгоценные камни - мы назовем эти вторичные драгоценные камни .

Когда вы настраиваете environment.rb, вы должны сказать:

config.gem 'primary-gem'

для любых драгоценных камней, которые вы используете напрямую.

Но вы также должны сказать. , .

config.gem 'secondary-gem'

, даже если вы не используете этот гем в своем приложении?

Или достаточно просто включить gem в каталог vendor / gems , чтобы он мог быть загружен вашим приложением?

Это было полезно?

Решение

Во время развертывания rails знает о ваших зависимостях, поэтому, если вы хотите заморозить ваши гемы, вы можете запустить

rake gems:unpack:dependencies

чтобы заморозить их в каталоге поставщиков.

Однако во время выполнения это задача gems для загрузки своих зависимостей, и обычно это делают гемы, поэтому должен работать config.gem 'primary'.

Другие советы

Нет, нет, по крайней мере, нет. Каждая спецификация GEM должна включать собственный список зависимостей. Когда основной гем установлен, RubyGems автоматически установит каждую зависимость гем от каскада.

Другими словами, если A требует B, который требует C + D, вам нужно только написать

config.gem 'A'

Когда команда

gem install A

запущен, RubyGems разрешит все зависимости и установит их. Вы можете просмотреть все работающие зависимости A (из проекта Rails)

rake gems

Иногда автор GEM может забыть включить некоторые зависимости GEM в спецификацию. В этом случае вы должны указать их в вашем environment.rb, чтобы приложение установило их. Конечно, это также хорошая идея, чтобы связаться с сопровождающим GEM, чтобы он мог решить проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top