Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何与团队一起管理开发中的gem路径?_Ruby On Rails_Ruby_Environment Variables_Gemfile - Fatal编程技术网

Ruby on rails 如何与团队一起管理开发中的gem路径?

Ruby on rails 如何与团队一起管理开发中的gem路径?,ruby-on-rails,ruby,environment-variables,gemfile,Ruby On Rails,Ruby,Environment Variables,Gemfile,我和我的团队在一个项目中遇到了一个问题,我想知道你是如何处理这种情况的 我们在同一个项目中工作,项目中有我们制作的宝石,我们也在制作这些宝石 因此,我们的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 g

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

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

因此,我们的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"]

我尝试了很多不同的方法,以stackoverflow的帖子作为参考。。。但不起作用。

我有两种解决方案:

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.使用
\uuuu dir\uuuu
。 返回调用此方法的文件的绝对目录。这意味着,无论用户是谁,我们都可以得到基本目录

假设
Gemfile
位于
/Users/person1/apps/my_app/Gemfile
。然后
\uuuu dir\uuuu
将返回
/Users/person1/apps/my\u app

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

我为您提供了两种解决方案:

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.使用
\uuuu dir\uuuu
。 返回调用此方法的文件的绝对目录。这意味着,无论用户是谁,我们都可以得到基本目录

假设
Gemfile
位于
/Users/person1/apps/my_app/Gemfile
。然后
\uuuu dir\uuuu
将返回
/Users/person1/apps/my\u app

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

你也可以就相对路径结构达成一致?你可以这样做

gem "my_gem", :path => '../../apps/my_gem/'
就我个人而言,我总是使用
路径
在本地针对gem进行开发,但我总是将git引用推送到我的同事那里(因为这也意味着我针对gem开发的代码被发布了——至少推送到了repo)


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

您还可以就相对路径结构达成一致吗?你可以这样做

gem "my_gem", :path => '../../apps/my_gem/'
就我个人而言,我总是使用
路径
在本地针对gem进行开发,但我总是将git引用推送到我的同事那里(因为这也意味着我针对gem开发的代码被发布了——至少推送到了repo)


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

为什么
ENV
方法不起作用?我想如果我们通过终端设置ENVs,它会很好地工作,这就是我们的计划b。我尝试使用dotenv gem,但结果不好,gemfile是在加载dotenv之前读取的,因此无法识别.env文件。为什么
env
方法不起作用?我认为如果我们通过终端设置env,效果会很好,这就是我们的计划b。我尝试使用dotenv gem,但结果不好,gemfile在加载dotenv之前已经读取,所以无法识别.env文件。谢谢!第一个看起来不错,但我更喜欢第二个,所以我会尽快尝试,我会告诉你它是如何运行的。根据@nathanvda的解决方案,我刚刚测试了相对路径。谢谢Aaron!第一个看起来不错,但我更喜欢第二个,所以我会尽快尝试,我会告诉你如何按照@nathanvda的解决方案,我刚刚测试了相对路径的工作原理。谢谢@nathanvda,最后我们决定使用相对路径,它很有魅力:)。谢谢@nathanvda,最后,我们决定使用相对路径,它可以作为一个符咒:)。