Загрузка зависимостей во время выполнения с помощью компоновщика - PullRequest
2 голосов
/ 06 марта 2012

У меня есть приложение со множеством дополнительных компонентов, все со своими сложными зависимостями. Например, в некоторых развертываниях может потребоваться использовать функциональные возможности LDAP, и для них потребуется загружать гемы, связанные с ldap. Но многие этого не сделают, а те, кому это не нужно, не должны устанавливать гемы, связанные с ldap.

Как я могу использовать Bundler для загрузки этих зависимостей в зависимости от того, какие компоненты включены пользователями (развертывателями)?

Я не хочу заставлять развертывателей вручную редактировать свои Gemfiles. Должна быть предусмотрена возможность включения / отключения компонентов через пользовательский интерфейс приложения.

Просто включение всех возможных зависимостей в Gemfile не является идеальным. Некоторые из редко используемых компонентов требуют много сложной нативной компиляции. Другое решение может состоять в том, чтобы приложение редактировало свой собственный Gemfile. Но это немного неудобно и, вероятно, потребует перезагрузки каждый раз, когда меняются компоненты.

Есть ли в Bundler способ динамически загружать гемы во время выполнения? Если нет, есть ли альтернативы, которые предоставляют что-то вроде песочницы Bundler, но допускают динамическую загрузку?

1 Ответ

0 голосов
/ 18 сентября 2014

Вы можете предоставить несколько Gem-файлов и использовать пакетную установку --gemfile, чтобы использовать конкретный gem-файл и устанавливать только те Gems, которые вам нужны для этого развертывания.

В своем приложении вы можете затем использовать Bundle.setup с соответствующимгруппы ранее установленного Gemfile, чтобы просто загрузить соответствующие Gems

Конечно, это не простой и удобный способ, но он должен дать вам необходимую функциональность.

См. Настройка Bundler комплектация

...