Подтвердить что ты не робот

Как настроить Bundler/Gemfile для использования разных источников драгоценных камней во время разработки?

У меня есть приложение 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 каждый раз, когда я развертываю, что довольно сложно. Мой рабочий процесс таков:

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

По-видимому, вы можете использовать обычный 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

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

Ответ 3

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

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".