如何与团队一起管理 gem 开发路径?

how to manage gem path in development with team?

我和我的团队在项目中遇到了问题,我想知道你们是如何处理这种情况的。

我们在同一个项目中工作,该项目有我们制作的 gem,我们也在处理那些 gem。

所以我们的 gem 文件看起来像:

# 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"]

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

我有 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__ returns 调用此方法的文件的绝对目录。这意味着,无论用户如何,我们始终可以获得基本目录。

假设Gemfile位于/Users/person1/apps/my_app/Gemfile。然后 __dir__ 将 return /Users/person1/apps/my_app.

gem "my_gem", '1.1', path: File.join(__dir__, '..', 'my_gem')

你也可以同意亲戚path-structure?你可以做类似

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

我个人总是使用 path 在本地针对 gem 进行开发,但我总是将 git 引用推送给我的同事(因为这也意味着我的代码正在开发 -- gem,已发布 -- 至少推送到 repo)。

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

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