【问题标题】:How to make a Ruby gem executable如何使 Ruby gem 可执行
【发布时间】:2012-10-20 15:32:46
【问题描述】:

我可以通过调用它们各自的 gem 名称来使用像 RSpec 或 Rails 或 Pry 这样的 gem,例如rspecrailspry 在命令行上。如何使用我创建的宝石实现这一目标?我正在使用 bundler 来创建基本的 gem。

【问题讨论】:

  • 把你的可执行文件放在你 gem 的 bin/ 文件夹中

标签: ruby rubygems bundler


【解决方案1】:

我实际上在/bin 文件夹中有我的可执行文件。

原来我的问题是 bundler 的 gem 模板太聪明了,它只包含已提交给 git 的文件。我实际上还没有提交可执行文件,所以它没有把它捡起来:

# gemname.gemspec
gem.files         = `git ls-files`.split($\)

【讨论】:

  • 仅供参考,您需要做的就是用git add 索引它,然后再用bundle 索引
  • 不要忘记使文件可执行(chmod +x bin/gemname),并确保将可执行文件也添加到您的gemspecspec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
  • 从 bundler 1.8 开始,所有应用程序的可执行文件都应该位于 exe 文件夹而不是 bin 中,因此 bin 文件夹仅包含 binstub 和仅限开发的可执行文件。因此 gemspec 应该有 spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } 和文件可执行文件 chmod +x exe/gemname
【解决方案2】:

According to documentation 的 Gemspec 文件,您必须将可执行文件放在 bin/ 文件夹中。

【讨论】:

    【解决方案3】:

    要使您的 gem 在 CLI 中可执行,您应该进行以下设置。

    1. 将您的可执行文件放在bin 文件夹中,例如bin/hello
    2. 通过设置权限使该可执行文件 (chmod u+x bin/hello)
    3. 相应地设置 gemspec 配置 (hello.gemspec)
    spec.files  = `git ls-files -Z`.split("\x0")
    spec.bindir = 'bin'
    spec.executables << 'hello'
    

    spec.executablesbin 视为二进制文件和可执行文件的默认文件夹,但您可以更改它。

    您可以在此处找到相关文档:Gemspec#executables

    【讨论】:

      猜你喜欢
      • 2015-08-29
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多