在后续bundle安装时跳过本机扩展重新编译



由于安装 nokogiri gem (1.6.0( 需要时间,我的生产部署需要额外的几分钟。我知道这是因为安装 gem 会触发本机扩展编译。

请注意,我已经打包了我的捆绑包并将其签入 DVCS

bundle package

如果没有其他更改,有没有办法避免重新编译本机扩展,以便更快地部署?

更新:

我使用 Opscode Chef 进行部署(具体来说就是 chef-solo(

环境是:Ubuntu 12.04LTS 64位红宝石 193-p448

我找到了一种方法来做到这一点。解释如下:

默认情况下,捆绑器将 gem 安装到环境变量 BUNDLE_PATH 指向的文件夹中。BUNDLE_PATH的默认值为 vendor/bundle 。因此,所有 gem 都安装在/vendor/bundle文件夹中,该文件夹恰好是一个私有文件夹(对于每个版本的 Rails 应用程序(。安装新版本的 Rails 应用程序时,vendor/bundle不存在。因此,捆绑器安装/预编译每个 gem。它从vendor/cache中获取宝石,这比从rubygems.org下载宝石是一个很好的节省,但它仍然无法避免编译本机扩展。

我们可以通过将--path /shared/path传递给bundle install命令行来覆盖它。这将确保 gem 始终安装在 /shared/path 中,所有版本(Rails 应用程序的(都可以访问该版本。

使用这种方法,bundler 不会尝试重新安装/重新编译 gem,因为它会发现已安装的相同内容。

所以,这是对我有用的魔法命令

bundle install --local --deployment --path /shared/bundle --without development test

相关内容

  • 没有找到相关文章