Как настроить Gemfile для разработчика? - PullRequest
33 голосов
/ 22 ноября 2010

Существует общая схема:

, над одним проектом работает много разработчиков, и Gemfile (.lock) используется совместно с SCM.Но что, если некоторые разработчики захотят использовать разные инструменты для тестирования и разработки?Как это сделать?

Проблема в том, что когда вы помещаете в Gemfile условные разделы, Gemfile.lock также будет отличаться для каждого разработчика, и поэтому вы будете сталкиваться с конфликтом каждый раз, когда переходите к SCM.

Есть ли какое-то простое, широко признанное решение?

Ответы [ 7 ]

19 голосов
/ 22 ноября 2010

Мне нравится иметь это в моем Gemfile:

local_gemfile = File.dirname(__FILE__) + "/Gemfile.local"
if File.file?(local_gemfile)
  require local_gemfile
end

У меня также есть Gemfile.local и Gemfile.lock в gitignore. Я знаю, что не «должен», но я не думаю, что предостережения (такие, как те, которые вы упоминаете в своем вопросе) того стоят

ОБНОВЛЕНИЕ для Bundler 1.0.10 от 3 марта 2011 г.

local_gemfile = File.dirname(__FILE__) + "/Gemfile.local.rb"
if File.file?(local_gemfile)
  self.instance_eval(Bundler.read_file(local_gemfile))
end

Мне пришлось использовать это с Rails 3 и Bundler 1.0.10.

3 голосов
/ 23 ноября 2010

Вы можете использовать флаг without Bundler для исключения групп.

Если у вас есть следующий Gemfile

group :jakubs_testing_tools do
  gem "rspec"
  gem "faker"
end

Вы можете исключить их с помощью bundle install

$ bundle install --without jakubs_testing_tools

http://gembundler.com/groups.html

3 голосов
/ 22 ноября 2010

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

Если драгоценные камни не нужны для запуска приложения или его тестов, драгоценные камни не обязательно должны находиться в файле гемов.Просто попросите каждого разработчика создать набор гемов (я предполагаю, что вы используете RVM, если не хотите) для приложения и установите там все, что им нужно, а затем просто добавьте то, что приложение должно запускать, в гемфайл.

2 голосов
/ 11 января 2012

Это не поможет вам прямо сейчас, но был открытый запрос функции для Bundler, чтобы добавить поддержку Gemfile.local на века. Это запланировано где-то в серии 1.x, так что следите за обновлениями.

Если ваша основная проблема связана с гемами IRB для разработчиков, в комментариях к этой проблеме есть пара обходных путей .

0 голосов
/ 23 марта 2017

Я полагаю, что метод install_if (недавно добавленный) решает проблему:

install_if -> { `whoami`.strip == 'jakub' } do
  gem "pry-rails"
end

См. http://bundler.io/v1.14/man/gemfile.5.html#INSTALL_IF

0 голосов
/ 23 ноября 2010

(в основном та же идея, что и в комментарии Августа Лиллеаса: gitignore)

Поместите стандартный / минимальный Gemfile в SCM, а затем попросите разработчиков изменить его в своих системах и никогда не фиксировать. Пусть они добавят его в свою неактивную ревизию в своем клиенте SVN (если они его используют), другие SCM должны иметь что-то похожее.

Вот как мы это делаем в моей компании - работает очень хорошо:)

0 голосов
/ 22 ноября 2010

Каждый разработчик может создать свою собственную ветку - Bundler отлично работает с разными ветками, имеющими разное содержимое Gemfile.Для разработчиков будет хорошей идеей добавлять префиксы к именам ветвей, чтобы избежать путаницы или коллизий.

...