我的团队和我不断更新我们的Gemfile,我们的应用程序中第60行和第61行的这两行不断变化。我们希望它们保持不变。我们有什么方法可以让这些线条永远不变?但仍然可以检查我们的Gemfile中的东西?
group :development do
gem 'ph_app', path: '/Users/joe12/Desktop/VBR/ph_app'
end
答案 0 :(得分:1)
根据要求,回答涉及环境变量:
在你的Gemfile中使用它:
group :development do
gem 'ph_app', path: ENV['PH_APP_HOME']
end
让每个开发人员在其环境中设置该环境变量。在Linux或OSX上通常会进入~/.bash_profile
,例如:
export PH_APP_HOME='/Users/joe12/Desktop/VBR/ph_app'
如果您在IDE中运行特定于rails的二进制文件,那么您可能还必须在那里设置环境变量。
这不会干扰生产和测试环境,因为:development
组不会捆绑在那里。 (你确实相应地设置了这些环境,对吗?)
请注意,Gemfile.lock中的相应条目将因开发人员而异。将更改添加到版本控制时,开发人员需要小心。
答案 1 :(得分:1)
根据要求,答案涉及单独的文件:
使用非默认Gemfile作为开发人员。这是该项目最不具侵入性的解决方案,但也可能对开发人员来说最不方便。
在Gemfile.custom
旁边创建Gemfile
,其中包含特定于开发人员的宝石:
eval File.read(__dir__ + '/Gemfile')
group :development do
gem 'ph_app', path: ENV['PH_APP_HOME']
end
版本控制应忽略Gemfile.custom
。
eval
是一个普通的Ruby指令。与File.read
一起,它将导致读取另一个文件并解释其内容。您可以在其他文件中使用bundler DSL而无需执行任何特殊操作。
从项目根目录执行此操作以开始使用备用Gemfile:
bundle config --global gemfile Gemfile.custom
使用--global
将为开发人员的计算机(针对该用户)设置所有项目的值。这就是开发人员可能不太喜欢这个解决方案的原因:他们机器上的每个捆绑项目都需要Gemfile.custom
。
或者,可以将自定义Gemfile选项提供给bundler命令。这样,其他项目不会受到影响,但每个bundler命令都必须使用该选项进行修改。 Binstubs可能会让这更方便,但我没试过。
请注意,Gemfile.custom.lock中自定义gem的条目将因开发人员而异。将更改添加到版本控制时,开发人员需要小心。
答案 2 :(得分:0)
您需要使用“git filters”以及“clean”和“smudge”的组合。这里的帖子更详细地解释了:
How to tell git to ignore individual lines, i.e. gitignore for specific lines of code
答案 3 :(得分:0)
涉及单独文件的另一个答案:
使用eval
使用其他文件的内容。在Gemfile
中,添加以下行:
other_path = __dir__ + '/Gemfile.local'
eval File.read(other_path) if File.exists? other_path
开发人员可以创建Gemfile.local
并在其中添加自定义宝石:
group :development do
gem 'ph_app', path: '/Users/joe12/Desktop/VBR/ph_app'
end
这个版本不是很干扰(但对于Gemfile中的额外行)。它非常灵活,因为本地配置是可选的。无需在生产机器上提供空文件。如果gem' ph_app'这是一个很好的解决方案。在开发环境中是可选的。
此解决方案有点类似于使用不同的Gemfile(请参阅其他答案),但配置了--local
。但更灵活:)
请注意,Gemfile.lock中自定义gem的条目将因开发人员而异。将更改添加到版本控制时,开发人员需要小心。
答案 4 :(得分:0)
涉及相对路径的答案:
不要让开发人员决定将其他项目放在哪里ph_app
,而是让它们将它放在与主机项目相同的目录中。 (不是嵌套但在同一个父目录中。)
然后将其添加到Gemfile:
group :development do
gem 'ph_app', version: '2.1.32', path: '../ph_app'
end
请注意添加的版本字符串。多亏了这一点,bundler将确保本地文件实际提供ph_app
的请求版本。每个开发人员都需要手动从版本控制中提取最新的更改。当主机项目切换分支时,他们可能还必须手动切换分支。也许这可以通过git触发器来缓解。
如果您的生产环境需要,您也可以以相同的方式提供ph_app
。然后,您需要使用部署脚本安装正确版本的gem。但是,引用您的版本控制服务器(例如github)将更容易,并确保两个项目保持同步。
主机项目的Gemfile.lock中ph_app
gem的条目对所有开发人员都是一样的。它只包含版本字符串,即没有提交哈希。很好,很容易:)