构建gem,找不到可执行文件

时间:2015-05-13 15:24:03

标签: ruby gem

我正在编写我的第一颗红宝石宝石,而且我在设置宝石的整个结构上有点新鲜。我从阅读this guide的理解是,为了为我的gem创建可执行文件,我需要执行以下操作:

  1. 在我的gemspec中添加一行,指定可执行文件的名称,如下所示:

    s.executables << 'gemname'

  2. 使用

    构建gem

    gem build gemname.gemspec

  3. 在本地安装gem(如果你尝试通过推送rubygems进行安装,每次你不得不经常更改版本)

    gem install gemname-0.0.1.pre.gem

  4. 然后用

    测试一下

    gemname foo-arguments, --bar-options

  5. 如果我在#4上完成所有这些步骤,我会收到以下错误:

    $ gemname
    zsh: command not found: gemname
    

    假设可执行文件以shebang开头并位于gemname / bin / gemname

    如果我导航到gem文件夹的根目录并运行bin / gemname来测试可执行文件,那么一切正常。

    Here是我当前gemspec的要点,github here上提供了gem源。

3 个答案:

答案 0 :(得分:4)

您需要在spec.files中添加gem中需要包含的所有文件。您错过了添加bin目录中的文件。

例如,我从one of my gems获得了以下配置:

Gem::Specification.new do |spec|
  spec.files         = Dir["{bin,lib}/**/*", "LICENSE", "README.md"]
  spec.test_files    = Dir["spec/**/*"]
  spec.require_paths = ["lib"]
  spec.executables   = ["yarr"]
end

答案 1 :(得分:2)

您的gemspec正在尝试更改加载路径。我建议先修复它,因为你报告的内容似乎与宝石无法找到其文件一致。

请查看您的gemspec以获取此代码:

lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)

然后查看http://guides.rubygems.org/patterns/

“Gems不应该更改$ LOAD_PATH变量.RubyGems会为你管理这个。像这样的代码不应该......”

有关使用现有加载路径加载的各种解决方案以及require_relative等帮助程序,请参阅http://guides.rubygems.org/patterns/

答案 2 :(得分:0)

此外,您需要确保您的可执行文件是可执行的。

$ chmod a+x bin/gemname

否则在构建gem之后命令将不可用。