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文件认为证书仍然存在。