Как настроить 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 для автоматизации моей текущей настройки.
Какой лучший рабочий процесс для этого сценария?
Ответы
Ответ 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".