Как работать с различными гем-зависимостями в Bundler для скриптов в рамках одного проекта Rails? - PullRequest
1 голос
/ 10 июня 2011

Наше приложение Rails извлекает каналы из нескольких источников.Рабочие, которые получают эти каналы, нуждаются в зависимостях гемов для rmagick, баз данных оракула и многих других гемов.Короче говоря, у них совсем другие потребности в зависимости, чем у основного веб-приложения.До Rails 3 и Bundler жизнь была хорошей.

Эти зависимости рабочих гемов не имеют отношения к нашему фактическому производственному веб-сайту.Под Rails 3 один Gemfile должен содержать все эти зависимости.Это приводит к неприятному побочному эффекту, так как требует загрузки всех зависимостей гемов внутри производственного приложения, что может привести к бессмысленному раздутию, возможным проблемам безопасности, утечкам памяти, усложнению развертывания и другим проблемам.К сожалению, Bundler нарушает стандартный механизм запроса, который обеспечил бы выход из трясины, позволив нам просто требовать необходимые драгоценные камни только в рабочем и иметь их где-то в системе, а не в комплекте.Рабочие используют наши модели рельсов для хранения своих данных.

Кто-нибудь может предложить решения, позволяющие сделать систему практичной в Rails 3?Я испытываю желание заставить Gemfile использовать условные переменные окружения в местах для управления командами gem, однако, кажется, что Gemfile.lock мог бы сделать этот проблематичный переход от работы над одним рабочим сценарием (для каналов) к следующему, что имело быразные зависимости.Помощь ???

1 Ответ

3 голосов
/ 10 июня 2011

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

group :workers do
  gem "extra_gem_1"
  gem "extra_gem_2"
end

Затем вы можете позвонить

Bundler.require(:default, :workers)

, и это должно загрузить ваши драгоценные камни.Как это работает, будет зависеть от вашей настройки, возможно, вы сможете добавить логику к config/application.rb, или вам может потребоваться сделать это в другом месте.Это может быть хакерским, но все равно работает в консоли.

При установке ваших драгоценных камней, вы можете позвонить:

bundle install --without workers

, чтобы исключить эти драгоценные камни из производства.

В качестве альтернативы, вы можете использовать два Gemfiles, но это также кажется беспорядком, так как предположительно есть какой-то кроссовер.

...