RPM 打包 ruby​​ 项目

Spr*_*dzy 5 fedora rpm ruby packaging rubygems

我想将从 git 获取的 ruby​​ 程序打包到 RPM 包中。我有一个构建服务器和一个生产服务器(相同的操作系统/相同的架构)。

与大多数 ruby​​ 项目一样,我的项目确实有 gem 依赖项。

我找到了两种做我想做的事情的方法,我想知道哪一种是最好的 - 大多数 UNIX/Linux 哲学 - 操作方面

  • 在生产服务器上减少捆绑

第一个(对我来说看起来更好)是做一个bundle install --standalone --deployment --path %{buildroot}/usr/lib/rubygems/1.8/gems/ --binstubs %{buildroot}/usr/lib/rubygems/1.8.bin. 这会将 gem 安装在将部署 .rpm 的服务器上的 gem 系统路径上,无需安装捆绑包。我不确定的是,当我使用相同的 gem 安装其他 rpm 时会发生什么?当我删除一个带有在两个包之间共享的 gem 的包时,会发生什么?

  • 在生产服务器上捆绑

bundle install --deployment命令将直接在项目本身中执行。这样就可以在目录中找到所有内容vendor/。在网上我可以看到一些关于供应商一切政策的帖子,它似乎不正确的操作明智,因为很多宝石将被重复。由于我没有红宝石背景,我不知道它的确切优点/缺点

如果有人已经做了类似的事情,你会采取哪一种方式?从运营角度来看,什么才是最好的解决方案?

Mic*_*ton 4

不要使用 RPM 部署 gem,除非您也使用 RPM部署其所有依赖的 gem 。请参阅Fedora Ruby 打包指南,了解构建 RPM 的正确方法和构建 gems 的示例规范文件,以及如何为 Rails Web 应用程序构建 RPM。

如果您需要做一些破坏 RPM 最佳实践的事情,那么您最好不要使用 RPM 来部署. 使用以部署为中心的工具,例如 capistrano;它可以自动从 git 检出您的应用程序并正确部署它(一旦您配置它)。