Ruby 正在尝试构建gem,获得gem::InvalidSpecificationException:";[…]不是文件”;
我正在尝试构建一个我编写的名为Ruby 正在尝试构建gem,获得gem::InvalidSpecificationException:";[…]不是文件”;,ruby,rubygems,gem,gemspecs,Ruby,Rubygems,Gem,Gemspecs,我正在尝试构建一个我编写的名为client\u-package的定制gem,但失败了 我的目录结构如下所示: client_package Gemfile Gemfile.lock client_package.gemspec Rakefile Readme.md .gitignore .git ...git files... lib client_package.rb client_
client\u-package
的定制gem,但失败了
我的目录结构如下所示:
client_package
Gemfile
Gemfile.lock
client_package.gemspec
Rakefile
Readme.md
.gitignore
.git
...git files...
lib
client_package.rb
client_package
version.rb
api.rb
...more...
# encoding: UTF-8
require File.expand_path('../lib/client_package/version', __FILE__)
Gem::Specification.new do |s|
s.name = 'client_package'
s.version = ClientPackage::VERSION
s.platform = Gem::Platform::RUBY
s.files = `git ls-files`.split('\n')
s.executables = `git ls-files -- bin/*`.split('\n').map{ |f| File.basename(f) }
s.require_paths = ['lib']
# also have s.authors, s.email, s.homepage, s.summary, s.description
s.add_dependency 'httparty'
s.add_dependency 'json'
end
我的client\u package.gempec
如下所示:
client_package
Gemfile
Gemfile.lock
client_package.gemspec
Rakefile
Readme.md
.gitignore
.git
...git files...
lib
client_package.rb
client_package
version.rb
api.rb
...more...
# encoding: UTF-8
require File.expand_path('../lib/client_package/version', __FILE__)
Gem::Specification.new do |s|
s.name = 'client_package'
s.version = ClientPackage::VERSION
s.platform = Gem::Platform::RUBY
s.files = `git ls-files`.split('\n')
s.executables = `git ls-files -- bin/*`.split('\n').map{ |f| File.basename(f) }
s.require_paths = ['lib']
# also have s.authors, s.email, s.homepage, s.summary, s.description
s.add_dependency 'httparty'
s.add_dependency 'json'
end
我的所有文件都已提交,git状态是干净的
在顶部的client_包
目录中,我运行gem build client_包.gempec
并得到以下错误:
ERROR: While executing gem ... (Gem::InvalidSpecificationException)
[".gitignore
Gemfile
Rakefile
Readme.md
client_package.gemspec
lib/client_package.rb
lib/client_package/api.rb
lib/client_package/version.rb
lib/client_package/...more...
"] are not files
这让我感到困惑,因为这些文件对我来说肯定是文件。无论如何,我认为如果它没有看到这些文件,就会出现一些路径问题,只是做了一些尝试和错误,我发现如果我进入一个目录(位于顶级client\u package
之上),然后运行gem build client\u package/client\u package.gempec
,它一开始看起来确实工作,创建文件client\u package-1.0.0.gem
。但还是有问题。如果我随后使用gem安装客户端\u包-1.0.0.gem
安装该gem,那么它似乎也可以工作。但这是:
require 'rubygems'
require 'client_package'
返回LoadError:没有要加载的文件--client\u包
我觉得我一定错过了一些小而重要的东西。有什么想法吗?这很小但很重要:
split('\n')
应该是split(“\n”)
因为它看起来像
[".gitignore
Gemfile
Rakefile
Readme.md
client_package.gemspec
lib/client_package.rb
lib/client_package/api.rb
lib/client_package/version.rb
lib/client_package/...more...
"]
可能是一个包含单个多行字符串的数组,而不是一个包含多个字符串的数组。为恢复此旧线程找到了借口,但我发现了另一个原因:如果您没有签入git,一些旧的(已删除的文件)可能会干扰:在磁盘上它们不存在,但git ls文件可能会报告它们包含在gem中
签入文件,这个错误就结束了。Me和我对单引号的依赖=)。这正是我们的问题。非常感谢。为雨果人干杯!我有一个被删除的文件导致了这个问题——一旦我运行了
git rm
(例如,执行了文件删除),我就没事了——我不需要实际提交。在这种情况下,即使你不想提交,你也可以只做git add.
,这样gem命令就会忽略删除的文件。这节省了我的时间。我删除了gem签名证书,但gem build仍然在抱怨,因为git ls文件认为证书仍然存在。