как управлять драгоценным камнем в разработке с командой?

У меня возникла проблема с работой над проектом с моей командой, и я хочу знать, как вы справляетесь с такими ситуациями.

Мы работаем над одним и тем же проектом, и в проекте есть драгоценные камни, сделанные нами, и мы также работаем над этими драгоценными камнями.

Итак, наш gemfile выглядит так:

# Person 1
gem "my_gem", '1.1', :path => '/Users/person1/apps/my_gem/'

# Person 2
gem "my_gem", '1.1', :path => '/Users/person2/apps/my_gem/'

# Person 3
gem "my_gem", '1.1', :path => '/Users/person3/apps/my_gem/'

Проблема в том, что когда мы нажимаем на наш пульт с помощью Git, у нас каждый раз возникают конфликты (звучит логично). Я попытался использовать переменные среды с драгоценным камнем dotenv, сделав что-то вроде:

# Person x
gem "my_gem", '1.1', :path => ENV["MY_PATH"]

Я пробовал много разных способов, используя в качестве ссылки многие сообщения stackoverflow... но не работает.


person Matias Seguel    schedule 10.04.2018    source источник
comment
почему подход ENV не работает?   -  person max pleaner    schedule 10.04.2018
comment
Я думаю, если мы настроим ENV через наш терминал, он будет работать нормально, это наш план б. Я пытался использовать dotenv gem с плохими результатами, gemfile читается перед загрузкой dotenv, поэтому не распознает файл .env.   -  person Matias Seguel    schedule 10.04.2018


Ответы (2)


Вы могли бы также договориться об относительной структуре пути? Вы можете сделать что-то вроде

gem "my_gem", :path => '../../apps/my_gem/'

Лично я всегда использую path для локальной разработки с гемом, но я всегда отправляю ссылку на git своим коллегам (поскольку это также означает, что код, который я разрабатываю для --гема, выпускается -- по крайней мере, отправляется в репо).

gem "my_gem", git: '[email protected]:username/my_gem.git'

А в Gemfile.lock (которую мы тоже пушим в репозиторий) мы видим ревизию, чтобы при установке коллегами или при деплое мы получали ту же версию.

person nathanvda    schedule 10.04.2018
comment
Спасибо @nathanvda, наконец-то мы решили использовать относительные пути, и это прекрасно работает :). - person Matias Seguel; 18.04.2018

У меня есть 2 решения для вас:

1. У каждого гема есть собственный репозиторий git.

Вы можете дать каждому гему отдельный репозиторий git, и ваш Gemfile будет выглядеть так:

# Assuming private Github
# and your private keys are setup correctly on Github.
gem 'my_gem', '1.1', git: '[email protected]:username/my_gem.git'

2. Используйте __dir__.

Kernel.__dir__ возвращает абсолютный каталог вызываемого файла Этот способ. Это означает, что мы всегда можем получить базовый каталог независимо от пользователя.

Предположим, что Gemfile находится в /Users/person1/apps/my_app/Gemfile. Тогда __dir__ вернет /Users/person1/apps/my_app.

gem "my_gem", '1.1', path: File.join(__dir__, '..', 'my_gem')
person Aaron Qian    schedule 10.04.2018
comment
Спасибо Аарон! первый выглядит хорошей идеей, но я бы предпочел второй, так что я попробую как можно скорее, и я расскажу вам, как это происходит - person Matias Seguel; 10.04.2018
comment
FYI Согласно решению @nathanvda, я только что проверил, что относительный путь также работает. - person Aaron Qian; 10.04.2018