gpt4 book ai didi

ruby-on-rails - 供应商/bundle 的目的是什么? Heroku 告诉我删除它

转载 作者:行者123 更新时间:2023-12-03 10:31:14 25 4
gpt4 key购买 nike

在对 Heroku 进行一些更改后,我注意到有关 vendor/bundle 的警告。 (请参阅下面的 警告 )。

如果根据警告,它应该从 Git 跟踪中“删除”,那么这个目录的目的是什么?

为什么不是 vendor/bundle自动 .gitignore默认情况下是 Rails 吗?

我应该跑 bundle pack ? (实际上是 bundle package 吗??)
bundle pack周围有什么优缺点| (相对于 developmentproduction )?

为了让这更令人困惑,Ryan McGeary 有一篇受欢迎的博客文章,标题为 "Vendor Everything" Still Applies强烈主张运行 bundle install --path vendorecho 'vendor/ruby' >> .gitignore和包装 gem vendor/cache通过运行 bundle package .任何与我的其他关注相关的问题都将不胜感激。

谢谢你。

-bash> git push production master
...

-----> Heroku receiving push
-----> Ruby/Rails app detected
-----> WARNING: Removing `vendor/bundle`.
Checking in `vendor/bundle` is not supported. Please remove this directory
and add it to your .gitignore. To vendor your gems with Bundler, use
`bundle pack` instead.
-----> Installing dependencies using Bundler version 1.2.1
Running: bundle install --without development:test --path vendor/bundle --binstubs bin/ --deployment
Using rake (0.9.2.2)
Using i18n (0.6.0)
...

最佳答案

如果您有 vendor/bundle然后在您的项目中的目录 you must have run the bundle command with the --path vendor/bundle argument .这会将您项目的所有 gem(在 Gemfile 中列出)的文件加载到 vendor/bundle 中。目录中的本地项目,而不是系统 gem 位置。您可以这样做以将项目的 gem 与任何其他项目完全隔离。
Bundler 擅长解决所有依赖关系,因此没有必要使用 --path但是有些人选择这样做是因为他们希望将他们的 gem 与他们的项目分开并组织起来。这也意味着本地机器上的 bundler 的设置方式与 Heroku 使用 bundler 的方式相同。
使用此选项,您仍会从 rubygems 下载所有 gem 。服务器每次运行 bundle命令。
bundle package 更进一步,实际上是从 rubygems 下载原始 gem 文件。并将它们缓存到 vendor/cache目录。这意味着您不再需要连接到 rubygems运行 bundle 命令,因为它将使用打包的文件作为源。如果您需要更新 gem 版本,则需要连接到 rubygems在第一次请求时收集新版本。使用 bundle package当然需要额外的磁盘空间,这取决于具体情况,这可能是也可能不是问题。每次推送到 Heroku 时,它也会增加部署时间和带宽要求。
Heroku 运行 bundle每次执行命令时git push ,阅读您的 Gemfile.lock并安装应用程序运行所需的 gem。默认情况下 --path vendor/bundle选项被使用。这样每个应用程序都有一组与 Heroku 上所有其他应用程序分开的 gem 文件。如果您有 vendor/bundle源代码管理中的目录,然后将其推送到 Heroku,然后您可以看到存在重大冲突的可能性,因为它然后尝试将 gem 加载到 vendor/bundle 中。已经存在的目录。如果它被推送,那么 Heroku 会删除 vendor/bundle运行前的目录 bundle install消除这些潜在的冲突。如果是这种情况,那么离开 vendor/bundle 将浪费部署时间和带宽。在版本控制下,最好将其添加到您的 .gitignore .
如果您想在 Heroku 上完全控制您的 gem,请使用 bundle package命令并确保 vendor/cache目录受源代码控制。 Heroku 运行时 bundle install它将使用 vendor/cache 的内容作为 gem 来源而不是使用 rubygems .这是否有用取决于个人喜好、您正在构建的应用程序类型以及更新 gem 的频率。 Ryan McGeary 的帖子建议使用 bundle package如果旧 gem 在将来的某个时候变得不可用,则很有用。对于不定期更新的项目/应用程序来说,这似乎是一个更大的问题。
从我的角度来看,我一般使用 --path vendor/bundle使我的本地设置尽可能接近 Heroku 的设置。我把vendor/bundle进入我的项目 .gitignore文件,我不打包 gems,因为我的项目相对定期更新。
Rails 有一个非常有限的 .gitignore文件。您实际上需要自己构建所需的东西,这就是 vendor/bundle 的原因。默认情况下不包括在内。
我假设 Heroku 的意思是 bundle package当他们说 bundle pack .

关于ruby-on-rails - 供应商/bundle 的目的是什么? Heroku 告诉我删除它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12573596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com