如何使用团队管理开发中的gem路径?

时间:2018-04-10 04:12:37

标签: ruby-on-rails ruby environment-variables gemfile

我在与我的团队合作的项目中遇到了问题,我想知道你是如何管理这样的情况的。

我们在同一个项目中工作,该项目由我们制作宝石,我们也在研究这些宝石。

所以我们的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 gem的环境变量,做类似的事情:

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

我尝试了很多不同的方法,使用了许多stackoverflow的帖子作为参考......但是没有用。

2 个答案:

答案 0 :(得分:3)

我有2个解决方案:

1。每个gem都有自己的git存储库。

您可以为每个gem分配一个单独的git存储库,您的Gemfile将如下所示:

# Assuming private Github
# and your private keys are setup correctly on Github.
gem 'my_gem', '1.1', git: 'git@github.com: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')

答案 1 :(得分:1)

您还可以就相对路径结构达成一致吗?你可以做点什么

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

我个人总是使用path来开发本地的gem,但我总是将git引用推送给我的同事(因为这也意味着我正在开发的代码 - gem,已经发布 - 至少推到回购网站。

gem "my_gem", git: 'git@github.com:username/my_gem.git'

Gemfile.lock(我们也推送到存储库)中,我们看到了修订版,以便在同事安装时或部署时我们获得相同的版本。