use*_*833 25 ruby-on-rails heroku bundler ruby-on-rails-3.2
在向Heroku推送一些更改后,我注意到了一个警告vendor/bundle(请参阅下面的警告).
如果根据警告它应该从Git跟踪中"删除",这个目录的目的是什么?
为什么Rails默认不vendor/bundle自动.gitignore?
我该跑bundle pack吗?(实际上是bundle package??)
有什么利弊bundle pack(相对于两者development和production)?
为了使这更混乱,有一个流行的博客文章,由Ryan McGeary,标题为"供应商的一切"仍然适用强烈主张的运行bundle install --path vendor和echo 'vendor/ruby' >> .gitignore在包装宝石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)
...
Run Code Online (Sandbox Code Playgroud)
nmo*_*ott 84
如果您vendor/bundle的项目中有目录,那么在某些时候您必须bundle使用--path vendor/bundle参数运行该命令.这会将所有项目的宝石(列在其中Gemfile)的文件加载到vendor/bundle本地项目的目录中,而不是加载到系统gem位置.您可以这样做以将项目的宝石与任何其他项目完全隔离.
Bundler擅长解决所有依赖关系,所以没有必要使用,--path但有些人选择这样做,因为他们希望保持他们的宝石与他们的项目分开和组织.这也意味着本地计算机上的bundler设置方式与Heroku使用bundler的方式相同.
使用此选项,rubygems每次运行bundle命令时,您仍在从服务器下载所有gem .
bundle package更进一步,实际上下载原始的gem文件rubygems并将它们缓存到vendor/cache目录中.这意味着您不再需要连接来rubygems运行bundle命令,因为它将使用打包的文件作为源.如果您需要更新gem版本,那么它将需要连接到rubygems第一次请求时收集新版本.使用bundle packagewill当然需要额外的磁盘空间,这可能是也可能不是问题,具体取决于具体情况.每次推送到Heroku时,它还会增加部署时间和带宽要求.
Heroku bundle每次都会运行命令git push,阅读Gemfile.lock并安装应用程序运行所需的宝石.默认情况下,--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作为宝石源的内容而不是使用rubygems.这是否有用将取决于个人偏好,您正在构建的应用程序类型以及更新宝石的频率.Ryan McGeary的帖子表明,bundle package如果旧宝石在未来的某个时刻变得不可用,那么使用是有用的.对于那些没有定期更新的项目/应用来说,这似乎是一个更大的问题.
从我的角度来看,我通常使用--path vendor/bundle尽可能接近Heroku的本地设置.我把vendor/bundle我的项目放入.gitignore文件中,而且我没有打包宝石,因为我的项目是相对定期更新的.
Rails的.gitignore文件非常有限.实际上,您可以自己构建所需的内容,这就是vendor/bundle默认情况下不包含的原因.
我认为Heroku意味着bundle package什么时候说bundle pack.
| 归档时间: |
|
| 查看次数: |
18845 次 |
| 最近记录: |