简化的Ruby代码部署

7
这是我想象的开发和部署过程:
  1. 创建项目目录my_project
  2. 安装所需的Ruby版本。
  3. 安装所需的gems。
  4. 编写一些代码。
  5. 使用fpm打包整个项目。
  6. 将Debian软件包传输到生产服务器并进行安装。
我使用RVM和Bundler来解决一些问题,但是RVM不关心创建可移植的Ruby安装程序,因此您不能将~/.rvm/rubies移动到项目目录中并期望一切正常工作。您必须重写所有类型的硬编码#!行,并且在某些情况下,您必须将.so文件移动到lib目录中。我通过搜索互联网找到了一组脚本来完成我想要的事情,但整个过程感觉像一个巨大的hack。
我偶然发现了https://github.com/ot/bpt,可以用来构建完全可移植的Ruby安装程序,但该项目已经超过两年没有更新了,因此我有点犹豫是否要在其基础上构建一些东西。
有没有更优雅的解决方案来解决这个问题?人们如何隔离和部署Ruby项目?我觉得这应该是一个已经解决的问题。

我认识的大多数开发人员在服务器上使用 RVM / rbenv。他们在部署应用程序之前安装它(以及所需的 Ruby 版本)。 - Sergio Tulentsev
@SergioTulentsev:我想避免安装系统范围甚至是每个用户的 Ruby 版本。我希望有一个完全自包含的项目目录,只需要运行就可以了。没有任何用户或其他需要担心的东西。当然,在这种情况下,重写环境变量是不可避免的,但我找不到任何标准化的程序来执行此操作。 - David K.
从前,没有RVM。人们只能使用单一的系统ruby。但是后来Wayne出现了,并说“够了”。自包含的应用程序文件夹听起来像个好主意。也许现在就是你创造历史的时候了 :) - Sergio Tulentsev
1
这似乎是使用chroot的一个典型案例。 - the Tin Man
@theTinMan:chroot 可以工作,但我几乎可以确定有一种方法可以在不使用 chroot 的情况下完成它。 rbenvrvmruby-build 基本上已经接近了。我只是惊讶为什么没有人将其完全实现并创建一个工具,使 Ruby 项目目录完全可重定位。@SergioTulentsev 可能是对的。我可能需要在周末开始动手构建自己的工具。 - David K.
你想要的似乎已经大部分可以实现了。除了那些编译成系统资源的库(如nokogiri、rmagick、sqlite等)。你的deb包要么需要在服务器上源代码重新编译,要么需要为大多数体系结构提供二进制文件。此外,你的工作流似乎针对服务器和开发都是Debian-ish。我觉得大多数Ruby开发人员都在使用OSX,所以这可能是为什么这个工作流尚不存在的主要原因。 - berkes
1个回答

1

您描述的最接近的东西是Tokaido,据我所知,它仍在进行中。另一个项目是Vagrant,尽管它主要用于开发。


这很好,但似乎过于特定于OSX和Rails。 - David K.
实际上,我又读了一些资料,这可能可行。现在我只需要学习足够的sm框架知识,以便重用静态构建ruby的组件。 - David K.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接