构建 gem,未找到可执行文件
Building gem, executable not found
我正在编写我的第一个 ruby gem 并且我对设置 gem 的整个结构有点陌生。我阅读 this guide 的理解是,为了为我的 gem 创建可执行文件,我需要执行以下操作:
在我的 gemspec 中添加一行,指定可执行文件的名称,如下所示:
s.executables << 'gemname'
用
构建gem
gem build gemname.gemspec
在本地安装 gem(如果您尝试通过每次推送到 rubygems 来安装,您最终不得不不断更改版本)
gem install gemname-0.0.1.pre.gem
然后用
测试一下
gemname foo-arguments, --bar-options
如果我完成所有这些步骤,然后在 #4 上出现以下错误:
$ gemname
zsh: command not found: gemname
假设可执行文件是一个以 shebang 开头且位于 gemname/bin/gemname
的文件
如果我导航到 gem 文件夹的根目录并 运行 bin/gemname 测试可执行文件,一切正常。
Here is a gist of my current gemspec and the gem source is available on github here.
您的 gemspec 正在尝试更改加载路径。我建议先解决这个问题,因为您报告的内容似乎与 gem 无法找到其文件一致。
查看此代码的 gem规范:
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
然后看http://guides.rubygems.org/patterns/
"Gems should not change the $LOAD_PATH variable. RubyGems manages this for you. Code like this should not be necessary ..."
请参阅 http://guides.rubygems.org/patterns/ 了解使用现有加载路径加载的各种解决方案,以及 require_relative
.
等助手
您需要在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
此外,您需要确保您的可执行文件是可执行文件。
$ chmod a+x bin/gemname
否则该命令在构建 gem 后将不可用。
我正在编写我的第一个 ruby gem 并且我对设置 gem 的整个结构有点陌生。我阅读 this guide 的理解是,为了为我的 gem 创建可执行文件,我需要执行以下操作:
在我的 gemspec 中添加一行,指定可执行文件的名称,如下所示:
s.executables << 'gemname'
用
构建gemgem build gemname.gemspec
在本地安装 gem(如果您尝试通过每次推送到 rubygems 来安装,您最终不得不不断更改版本)
gem install gemname-0.0.1.pre.gem
然后用
测试一下gemname foo-arguments, --bar-options
如果我完成所有这些步骤,然后在 #4 上出现以下错误:
$ gemname
zsh: command not found: gemname
假设可执行文件是一个以 shebang 开头且位于 gemname/bin/gemname
的文件如果我导航到 gem 文件夹的根目录并 运行 bin/gemname 测试可执行文件,一切正常。
Here is a gist of my current gemspec and the gem source is available on github here.
您的 gemspec 正在尝试更改加载路径。我建议先解决这个问题,因为您报告的内容似乎与 gem 无法找到其文件一致。
查看此代码的 gem规范:
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
然后看http://guides.rubygems.org/patterns/
"Gems should not change the $LOAD_PATH variable. RubyGems manages this for you. Code like this should not be necessary ..."
请参阅 http://guides.rubygems.org/patterns/ 了解使用现有加载路径加载的各种解决方案,以及 require_relative
.
您需要在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
此外,您需要确保您的可执行文件是可执行文件。
$ chmod a+x bin/gemname
否则该命令在构建 gem 后将不可用。