将Ruby打包成可移植的可执行文件

我一直试图找到一个很好的解决方案很长一段时间:

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

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

便携式Ruby on Rails环境

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 

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

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


我介绍: Ruby Ship

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

它非常简单:下载repo(因为二进制文件而非常大)。 把它放在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命令的东西。

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

 # *nix (osx/linux/...) path/to/ruby_ship/tools/ruby_ship_build.sh path/to/ruby-XYZtar.gz # windows path\to\ruby_ship\tools\ruby_ship_build.bat path\to\ruby-XYZtar.gz 

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

编译过程有一些要求。 看看github网站 。

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

老post,但你也可以检查我的解决方案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/

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

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

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

此外,你提到不支持JRuby的gem,所以你可能使用带有原生扩展的gem。

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

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

  • 使用Ocra构建一个独立的Windows可分发版
  • 使用pkgr构建Debian软件包
  • 构建一个标准的OSX安装程序,它依赖于OSX中的系统Ruby(虽然有些问题 )

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