【问题标题】:how to manage gem path in development with team?如何与团队一起管理开发中的宝石路径?
【发布时间】:2018-09-19 13:48:22
【问题描述】:

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

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

所以我们的 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 的帖子作为参考...但不起作用。

【问题讨论】:

  • 为什么ENV 方法不起作用?
  • 我认为如果我们通过终端设置 ENV,它会正常工作,这是我们的计划 b。我尝试使用 dotenv gem 结果不好,gemfile 在加载 dotenv 之前被读取,所以不识别 .env 文件。

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


【解决方案1】:

我有两个解决方案给你:

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')

【讨论】:

  • 谢谢亚伦!第一个看起来不错,但我更喜欢第二个,所以我会尽快尝试并告诉你进展如何
  • 仅供参考,根据@nathanvda 的解决方案,我刚刚测试了相对路径也可以正常工作。
【解决方案2】:

您也可以就相对路径结构达成一致吗?你可以做类似的事情

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

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

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

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

【讨论】:

  • 谢谢@nathanvda,最后我们决定使用相对路径,它很有魅力:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 2011-06-06
  • 2014-04-11
  • 1970-01-01
  • 2013-02-09
  • 2017-05-13
  • 1970-01-01
相关资源
最近更新 更多