在后续的bundle安装上跳过本机扩展重新编译
由于安装nokogiri gem(1.6.0)需要时间,因此我的生产部署需要几分钟的时间。 我明白这是因为安装gem触发本地扩展编译。
请注意,我打包了我的包并将其检入DVCS
bundle package
如果没有其他更改,是否有避免重新编译本机扩展的方法,以便部署更快?
更新:
我使用Opscode Chef部署(主厨独奏具体)
环境是:Ubuntu 12.04LTS 64bit Ruby 193-p448
我找到了一种方法来做到这一点。 这里是解释:
Bundler默认将gem安装到环境变量BUNDLE_PATH
指向的文件夹中。 BUNDLE_PATH
的默认值是vendor/bundle
。 因此,所有的gems都安装在/vendor/bundle
文件夹中,这恰好是一个私人文件夹(针对每个版本的Rails应用程序)。 当安装新版本的Rails应用程序时, vendor/bundle
不存在。 因此Bundler安装/预编译每个gem。 它从vendor/cache
获取宝石,这比从rubygems.org
下载相同的程序节省了很多,但仍然无法避免编译原生扩展。
我们可以通过将--path /shared/path
传递给bundle install
命令行来覆盖它。 这将确保gems总是安装在/shared/path
,所有版本(Rails应用程序)都可以访问。
通过这种方法,bundler不会尝试重新安装/重新编译gem,因为它找到了相同的已安装。
所以,这是为我工作的神奇命令
bundle install --local --deployment --path /shared/bundle --without development test
链接地址: http://www.djcxy.com/p/73867.html
上一篇: Skipping native extension recompilation on subsequent bundle install