2012-03-06 1 views
2

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

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

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

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

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

+0

[Этот запрос функция Bundler] (https://github.com/carlhuda/bundler/issues/1636) может быть уместным. –

+0

Спасибо за эту ссылку Andrew. Я думаю, что мы будем в лучшей форме, если этот запрос функции будет выполнен (просто - будет лучше), но я бы хотел, чтобы можно было просто сделать что-то вроде вызова «Gemname» Bundle.gem внутри моего приложения. код. У меня такое ощущение, что в нынешней архитектуре Бундлера это может быть невозможно, но мне интересно, есть ли другие подобные проекты, которые могли бы сделать что-то подобное. –

ответ

0

Вы можете предоставить несколько Gemfiles и использовать пакет -gemfile для установки конкретного gemfile и установить только необходимые вам камни для этого развертывания.

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

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

См Bundler Setup bundle install

Смежные вопросы