在后续的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

下一篇: indent bug on overflow hidden