【问题标题】:Building gem, executable not found构建 gem,找不到可执行文件
【发布时间】:2015-05-13 15:24:02
【问题描述】:

我正在编写我的第一个 ruby​​ gem,我对设置 gem 的整个结构有点陌生。我从阅读 this guide 中了解到,为了为我的 gem 创建可执行文件,我需要执行以下操作:

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

    s.executables << 'gemname'

  2. 构建gem

    gem build gemname.gemspec

  3. 在本地安装 gem(如果您尝试通过每次推送到 ruby​​gems 来安装,您最终将不得不不断更改版本)

    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 来测试可执行文件,一切都会正常工作。

Here 是我当前 gemspec 的要点,gem 源代码可在 github here 上获得。

【问题讨论】:

  • 那么,问题出在哪里??
  • 对我来说似乎可以正常工作(我收到加载错误,我认为您需要将 commander 添加到您的依赖项中)。你得到了什么错误——是不是你的shell中出现了某种形式的“找不到命令”?如果是这样,您可能需要确保正确设置了 Rubygems,以便 gem 可执行文件在您的路径上。其他宝石可以吗?
  • @maxd 抱歉,问题是最后一位 gemname foo-arguments 不起作用,因为它说没有该名称的可执行文件。我将编辑问题。
  • @matt 我编辑了帖子以包含我得到的错误。我也刚刚注意到我收到了这条消息:rbenv: cannot rehash: /home/stephen/.rbenv/shims/.rbenv-shim exists Successfully installed get_freaky-0.1.2.pre

标签: ruby gem


【解决方案1】:

您的 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 会为你管理这个。这样的代码应该不是必需的......”

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

【讨论】:

    【解决方案2】:

    您需要在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
    

    【讨论】:

      【解决方案3】:

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

      $ chmod a+x bin/gemname
      

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

      【讨论】:

        猜你喜欢
        • 2018-09-13
        • 2020-04-22
        • 1970-01-01
        • 1970-01-01
        • 2019-06-02
        • 2021-07-17
        • 1970-01-01
        • 2011-05-17
        • 2019-11-02
        相关资源
        最近更新 更多