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

我正在编写我的第一个rubygem,我对整个gem的结构有点新意。 我阅读本指南的理解是,为了为我的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

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

 $ gemname zsh: command not found: gemname 

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

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

这是我当前gemspec的要点, 这里有github上的gem源。

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

例如,我从我的一个gem中得到以下配置:

 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 

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

查看您的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/ 。

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

 $ chmod a+x bin/gemname 

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