ruby - Ocra 和脚本在 Rubygems gemspec 中标记为可执行文件

标签 ruby windows rubygems load-path ocra

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

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

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

最佳答案

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

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

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

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


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

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

关于ruby - Ocra 和脚本在 Rubygems gemspec 中标记为可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11905065/

相关文章:

windows - Windows 上的快速桌面屏幕捕获

Rails 迁移中的 Mysql2 错误

ruby-on-rails - 如何跟踪已被杀死的 sidekiq 作业?

ruby 切片不为零

ruby-on-rails - 如何在Rails中创建连接表记录,有很多: through relationship

.net - SystemInformation.ComputerName、Environment.MachineName 和 Net.Dns.GetHostName 之间的区别

windows - 从 Mac OS X 克隆托管在 Windows 共享文件夹上的 git repo

ruby-on-rails - 为 Rails 3 创建插件或 gem?

ruby - 安装 gem Nokogiri-1.8.4 时出错

ruby-on-rails - 在 ruby​​ on rails 项目中向 stdlib 类添加扩展