Попытка построить гем, получить исключение Gem :: InvalidSpecificationException: «[...] не файлы» - PullRequest
21 голосов
/ 19 октября 2011

Я пытаюсь создать собственный гем, который я написал под названием client_package, но он терпит неудачу.

Моя структура каталогов выглядит так:

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...

А мой client_package.gemspec выглядит так:

# 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_package я запускаю gem build client_package.gemspec и получаю эту ошибку:

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_package), а затем запускаю gem build client_package/client_package.gemspec it сначала работает , создавая файл client_package-1.0.0.gem. Но что-то все еще не так. Если я затем установлю этот драгоценный камень с gem install client_package-1.0.0.gem, это также, кажется, работает. Но тогда это:

require 'rubygems'
require 'client_package'

Возвращает LoadError: no such file to load -- client_package.

Я чувствую, что, должно быть, мне не хватает чего-то маленького, но важного. Есть идеи?

Ответы [ 2 ]

43 голосов
/ 15 ноября 2014

Извините за воскрешение этого старого потока, но я нашел другую причину: если вы не зарегистрировали git, некоторые старые (удаленные файлы) могут помешать: на диске они не существуют, но git ls-файлы могут сообщить о них как овключены в гем.

Проверьте файлы и эта точная ошибка окончена.

15 голосов
/ 19 октября 2011

Это было бы мало, но важно:

Должно ли 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...
"]

может быть массивом, содержащим одну многострочную строку, а не массивом нескольких строк.

...