由于安装nokogiri gem(1.6.0)需要花费时间,因此我的生产部署需要花费几分钟。我了解这是因为安装gem会触发本机扩展编译。
请注意,我已经打包了捆绑包并将其签入DVCS
bundle package
如果没有其他更改,是否可以避免重新编译本机扩展,从而使部署更快?
更新:
我使用Opscode Chef进行部署(具体来说是chef-solo)
环境是:Ubuntu 12.04LTS 64bit Ruby 193-p448
我找到了一种方法。这里是解释:
Bundler默认情况下会将gems安装到环境变量指向的文件夹中BUNDLE_PATH
。默认值BUNDLE_PATH
是vendor/bundle
。因此,所有gems都安装在/vendor/bundle
文件夹中,该文件夹恰好是一个专用文件夹(对于Rails应用程序的每个版本)。安装新版本的Rails应用程序时,该版本vendor/bundle
不存在。因此,Bundler会安装/预编译每个gem。vendor/cache
与从中下载宝石相比,它可以节省很多宝石rubygems.org
,但仍然无法避免编译本机扩展。
我们可以通过传递--path /shared/path
给bundle install
命令行来覆盖它。这将确保gem始终安装在中/shared/path
,所有版本(Rails应用程序的版本)都可以访问。
使用这种方法,捆绑程序将不会尝试重新安装/重新编译gem,因为它会找到已安装的gem。
所以,这是对我有用的魔术命令
bundle install --local --deployment --path /shared/bundle --without development test
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句