【问题标题】:Ocra and scripts marked as executable in Rubygems gemspec在 Rubygems gemspec 中标记为可执行的 Ocra 和脚本
【发布时间】:2012-08-10 15:44:47
【问题描述】:
我创建了一个 gem,它公开了一个在 Linux 下工作的可执行文件。在 Windows 中,如果我导航到安装 gem 的目录,我可以从命令行运行它,但在调用 ruby 时我必须自己指定 -Ilib。
我想使用 Ocra 将可执行文件 + 依赖项(gem 的其余部分)+ Ruby 转换为其他用户的 exe 文件,但文档似乎是说手动弄乱加载路径对 Ocra 来说是个坏主意。
我如何告诉 Ocra 使用 gem 的可执行脚本而不自己弄乱 Ruby 的加载路径?我想这取决于我可以通过某种方式运行可执行脚本,该脚本利用它们是已安装 gem 的一部分并为我找出依赖关系这一事实。
【问题讨论】:
标签:
ruby
windows
rubygems
load-path
ocra
【解决方案1】:
事实证明,我的问题需要一个两部分的答案:
关于 Rugbygems 如何在 Windows 中打包可执行文件的潜在无知:它将它们放在 ruby 安装目录的 bin/ 目录中,该目录是在安装 Ruby 时添加到路径中的。脚本本身不可执行,但 Rubygems 为每个可执行文件创建一个 .bat 文件包装器,例如对于mygem.rb 一个随附的mygem.rb.bat 文件,它将从命令提示符的任何位置运行。
因此可以使用以下命令运行 ocra 脚本:ocra path/to/Ruby/bin/mygem.rb。
请注意,如果您将某种服务器作为可执行文件的一部分启动,它可能会在您运行 ocra 时运行,并且永远不要继续创建可执行文件。因此有必要在启动服务器之前检查 ocra 是否正在运行:
if not defined? Ocra
#do server startup stuff here
end
事实上,我最终创建了一个“安装程序”脚本,其中包含 if not defined? 代码,以免弄乱我可能想要用于其他目的的可执行脚本。