Har*_*ork 4 ruby ruby-on-rails bundler
我经常在 Dockerfiles 中看到以下行
ENV BUNDLE_FROZEN=true
Run Code Online (Sandbox Code Playgroud)
我检查了捆绑程序文档,它显示“不允许更改 Gemfile”。但我很困惑为什么有人会想要禁止人们更改 Gemfile。毕竟,随着项目的发展,我们可能会添加新的宝石。有人可以解释一下为什么我们需要这个环境变量,如何以及何时使用它,以及为什么它经常出现在 Dockerfile 中?
如果该环境变量检测到Gemfile和随附的Gemfile.lock.
默认情况下,运行时bundle install,bundler 将尝试更新Gemfile.lock是否添加了任何 gem 或更改了约束。在生产部署中,这通常是不可取的,因为这可能会导致安装未经完全测试的意外版本的 gem。
通过设置BUNDLE_FROZEN=true,bundler 将 (1) 需要现有的Gemfile.lock并且 (2) 将拒绝Gemfile.lock使用更新的信息来更新它。这可以确保您的生产部署仅使用锁定到您提交的Gemfile.lock.
这里的工作流程是,每次将 gem 添加到您的 gemGemfile或更新现有 gem 时,您还将运行bundle installresp。bundle update在您的本地计算机上更新Gemfile.lock. 然后,您可以测试更改并最终提交更新的Gemfile.lock. 当您稍后部署应用程序时,两个文件都是同步的。这样BUNDLE_FROZEN=true您就可以确保在生产中使用您在开发过程中指定和测试的确切环境。
最后,这基本上是一个自动防故障装置,迫使您(和您的同事)在Gemfile.lock更改Gemfile或任何依赖项后主动更新。如果您总是这样做(并且您确信这一点),则无需BUNDLE_FROZEN在生产中进行设置。但是,如果您设置了它,如果您忘记了这一点,那么捆绑程序将严重失败,而不是默默地安装您可能尚未完全测试的 gem 版本。
| 归档时间: |
|
| 查看次数: |
2589 次 |
| 最近记录: |