在CLI gem中,我在哪里存储第三方二进制可执行文件?

时间:2012-05-18 16:27:23

标签: ruby binary gem command-line-interface

似乎gem的可执行文件通常存储在/bin文件夹中,所有代码都存储在/lib文件夹中。我有一些第三方二进制可执行文件,我需要包含在我的gem中。我应该将它们放在/bin/lib文件夹中吗?

从我看到的/bin文件夹更多的是系统可执行文件,或者我希望我的系统能够从命令行调用的脚本。所以我不确定是否应该在/bin文件夹中包含第三方二进制文件。需要根据需要从/lib代码调用它们,而不是从命令行调用它们。

我想我可以将它们放在/lib/binaries文件夹中。随后,是否有从代码中调用这些可执行文件的最佳实践?

1 个答案:

答案 0 :(得分:2)

一般来说,您不希望在您的应用中加入“第三方可执行文件”;理想情况下,如果它们是RubyGems,您可以在gemspec中依赖它们。

话虽如此,假设您有充分的理由这样做,您可以确保它们通过以下方式分发到您的RubyGem中:

  • 将它们放入bin
  • 确保它们包含在您的gemspec中的files属性
  • 确保它们包含在您的gemspec中的executables属性
  • 确保bindir已设置。

所以,如果你有     /     /箱     /斌/ your_app     /斌/ other_app     /斌/ other_app2     /lib/your_app.rb

你的gemspec需要看起来像这样:

spec = Gem::Specification.new do |s| 
  s.name = 'your_app'
  s.version = '1.2.3'
  s.author = 'Your'
  s.email = 'your@email.com'
  s.platform = Gem::Platform::RUBY
  s.summary = 'Your app summary'
  s.description = 'Your app description`
  s.files         = [
    'bin/your_app',
    'bin/other_app',
    'bin/other_app2',
    'lib/your_app.rb',
  ]
  s.executables   = ["your_app","other_app","other_app2"]
  s.require_paths = ["lib"]
  s.bindir = 'bin'
end

当用户通过RubyGems安装您的应用程序时,三个可执行文件将在他们的路径中。