将Ruby打包成便携式可执行文件

时间:2014-05-25 13:05:03

标签: ruby cross-platform portability

我一直在努力寻找一个很好的解决方案:

是否有可靠的方法将ruby安装到该平台上可移植的文件夹中?我想要一个文件夹,我可以很容易地复制到我正在制作的发行版中,这样我就可以“随时随地”拥有一个红宝石环境。如果我需要编译源代码和东西,这很好,只要我最终安装了便携式ruby。

我找到了一些试图解决这个问题的资源,但没有一个能让我满意。

Portable Ruby on Rails environment

http://hcettech.blogspot.pt/2012/05/windows-portable-rails-development.html

对我来说,这是Ruby的一个主要痛点。如果在没有客户端首先安装Ruby的情况下无法使Ruby脚本工作,那么ruby在我的情况下基本上没有用。我真的希望我/我们可以解决这个问题,因此有可能让Ruby比现有的更有用。


注意:我知道Releasy之类的东西存在,但它仍然不是一个简单的ruby可执行文件。

我的目标是能够创建一个包含.bat / .sh脚本的文件夹,这样做:

#some bat/sh
./bin/ruby ./my_script.rb

是的,如果我对此问题有所了解,请将我击倒,因为这对我来说是一种解脱。

3 个答案:

答案 0 :(得分:20)

我对此感到厌倦,于是我决定自己解决这个问题。几天后我终于开始工作了。


我提出: Ruby Ship

这正是我所需要的,希望其他人也能从中受益!

这很简单:下载回购(由于二进制文件而非常大)。把它放在USB驱动器上,或任何你想要的地方,然后执行:

path/to/ruby_ship/bin/ruby_ship.sh -v
=> ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0]

适用于linux和mac,或者适用于Windows:

path\to\ruby_ship\bin\ruby_ship.bat -v
=> ruby 2.1.2p95 (2014-05-08 revision 45877) [i386-mswin32_100]

ruby​​_ship包装器就像你的普通红宝石一样,所以你可以传入一个脚本,或者做任何你会使用普通ruby命令的东西。

如果您不喜欢Ruby Ship捆绑的版本,那么只需使用tools目录中的编译脚本即可。下载你最喜欢的Ruby版本的源代码,比如X.Y.Z,然后执行以下操作:

# *nix (osx/linux/...)
path/to/ruby_ship/tools/ruby_ship_build.sh path/to/ruby-X.Y.Z.tar.gz

# windows
path\to\ruby_ship\tools\ruby_ship_build.bat path\to\ruby-X.Y.Z.tar.gz

这将构建你的红宝石味道并正确设置包装。现在你Ruby版X.Y.Z是可移植的!复制将此文件夹粘贴到您想要的位置,您就可以开始了!但请记住,它只会针对您当前的平台进行编译,因此如果您需要其他平台,请在这些平台上进行编译。

编译过程有一些要求。 Look at the github site

无论如何,希望其他人可能会觉得这很有用!如果事情不适合你,请提出问题,我会调查一下!

答案 1 :(得分:2)

旧帖子,但您也可以查看我的解决方案 rb2exe 。它将ruby应用程序转换为单个,可移植的独立可执行文件。

它支持Rails和Gemfile。

安装/使用:

gem install rb2exe

echo "puts 'Hello world'" > test.rb
rb2exe test.rb
./test

我在这里一步一步解释它的作用:

http://www.learnwithdaniel.com/2016/08/ruby-to-portable-exe-app/

答案 2 :(得分:1)

为了澄清我对您的问题的理解,您希望能够将Ruby与脚本一起打包,所有脚本都包含在一个目录中。类似的东西:

.
├── bin
│   └── ruby
├── my_script.bat
├── my_script.sh
└── my_script.rb

您希望这可以在多个平台上运行 - 您可以将批处理和shell脚本作为可能性,因此我假设* NIX和Windows都是潜在目标。这意味着要发布多个特定于平台的Ruby二进制文件。

另外,你提到了不支持JRuby的宝石,所以你可以使用带有原生扩展的宝石。

没有工具可以满足所有这些要求:(

如果您愿意放弃使用原生扩展,并为每个目标平台构建一个包,您可以:

  • 使用Ocra
  • 构建一个独立的Windows可分发版
  • 使用pkgr
  • 构建Debian软件包
  • 构建一个标准的OSX安装程序,它依赖于OSX中的系统Ruby(尽管some question that idea

毋庸置疑,这将涉及相当大的开销,特别是如果您想要完全自动化这些步骤并将其作为CI的一部分进行测试(我建议在完整的结束时进行烟雾测试) CI build)。