在Rubygems gemspec中标记为可执行的Ocra和脚本

时间:2012-08-10 15:44:47

标签: ruby windows rubygems load-path ocra

我创建了一个gem,它公开了一个在Linux下运行的可执行文件。在Windows中,如果我导航到安装gem的目录,我可以从命令行运行它,但是我必须在调用-Ilib时自己指定ruby

我想使用Ocra将可执行文件+依赖项(gem的其余部分)+ Ruby转换为其他用户的exe文件,但文档似乎是说使用Ocra手动搞乱加载路径是一个坏主意。

如何告诉Ocra使用gem的可执行脚本而不会自己搞乱Ruby的加载路径?我想这将取决于我可以运行可执行脚本的一些方式,利用它们是已安装的gem的一部分,并为我找出依赖关系。

1 个答案:

答案 0 :(得分:1)

我的问题证明需要两部分答案:

  1. 关于Rugbygems如何在Windows中打包可执行文件的潜在无知:它将它们放在ruby安装目录中的bin /目录中,该目录在安装Ruby时被添加到路径中。脚本本身不可执行,但Rubygems为每个可执行文件创建.bat文件包装器,例如for mygem.rb一个随附的mygem.rb.bat文件,它将从命令提示符的任何位置运行。

  2. 因此可以使用以下代码运行ocra脚本:ocra path/to/Ruby/bin/mygem.rb

  3. 请注意,如果您启动某种服务器作为可执行文件的一部分,它可能会在您运行ocra时运行,并且永远不会继续创建可执行文件。因此,在启动服务器之前检查ocra是否正在运行是必要的:

    
    if not defined? Ocra
      #do server startup stuff here
    end
    

    事实上,我最终创建了一个带有if not defined?代码的“安装程序”脚本,以免弄乱我可能需要用于其他目的的可执行脚本。