Как можно настроить Bundler / Gemfile на использование разных источников гемов во время разработки? - PullRequest
13 голосов
/ 07 сентября 2011

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

В идеале я мог бы сделать что-то подобное, но Bundler не позволяет вам указывать один и тот же камень дважды:

# Doesn't work:
group :development do
  gem 'awesome', :path => "~/code/awesome"
end

group :production do
  gem 'awesome', :path => "vendor/gems/awesome-0.0.1"
end

Тем временем я прибегал к ручной продаже драгоценного камня и обновлению источника драгоценного камня в Gemfile каждый раз, когда я развертываю, что довольно сложно. Мой рабочий процесс такой:

  1. Во время разработки укажите на мой драгоценный камень (gem 'awesome', :path => "~/code/awesome")
  2. Когда будете готовы к развертыванию, распакуйте gem в vendor/gems
  3. Обновить Gemfile, чтобы он указывал на продаваемый гем (gem 'awesome', :path => "vendor/gems/awesome-0.0.1")
  4. Выполнить bundle install (чтобы обновить Gemfile.lock)
  5. Код развертывания
  6. Вернуться к шагу 1.

Что за хлопоты! Я хотел бы сделать что-то более чистое, чем просто написание задач Rake для автоматизации моих текущих настроек.

Каков лучший рабочий процесс для этого сценария?

Ответы [ 3 ]

13 голосов
/ 01 мая 2012

Существует новая функция, которая позволяет сделать это, просто указав параметр конфигурации local.gem_name, например:

bundle config local.rack ~/path/to/local/rack

. Это работает, только если у гема есть git-репо и ветвь, указанные в Gemfile..

Подробнее см. В документации Bundler: http://bundler.io/v1.3/bundle_config.html

3 голосов
/ 07 сентября 2011

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

## based on an ENV variable
if ENV['RACK_ENV'] == "development"
  gem 'awesome', :path => "~/code/awesome"
else
  gem 'awesome', :path => "vendor/gems/awesome-0.0.1"
end

Может быть, это сработает.Если вам нужно продать свой драгоценный камень, находящийся в процессе разработки, возможно, вы могли бы сделать крошечный небольшой скрипт, который установит ENV, продаст его и сбросит ENV.А?

0 голосов
/ 12 июля 2012

Вот предложение, которое мне не удалось полностью использовать (использовалось для темы оживления, и у меня возникли проблемы с некоторыми таблицами стилей из темы):

group :production do
      gem 'gemname', '~> 0.1.6', :git => 'git://github.com/foouser/gemname.git'
end

group :development do
      gem 'gemnamedev', :path => '~/path/gemname' # use local version
end

Дублируйте ваш файл gemname.gemspec, назовите его gemnamedev.gemspec и измените в нем s.name на "gemnamedev".

...