2011-10-18 10 views
18

Próbuję zbudować niestandardowy klejnot, który napisałem o nazwie client_package, ale to się nie udaje.Próba zbudowania klejnotu, uzyskanie Gem :: InvalidSpecificationException: "[...] nie są plikami"

Moja struktura katalogów wygląda następująco:

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

A moja client_package.gemspec wygląda następująco:

# 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 

I wszystkie moje pliki są zaangażowani i stan git jest czysty.

Od wewnątrz górnej client_package katalogu, biegnę gem build client_package.gemspec i uzyskać ten błąd:

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 

To jest zastanawiające dla mnie, bo te z pewnością wydaje się być pliki do mnie. W każdym razie doszedłem do wniosku, że istnieje pewien problem związany ze ścieżką, jeśli nie widzę tych plików, a po prostu wykonując próbę i błąd, odkryłem, że jeśli przejdę do katalogu (jednego powyżej najwyższego poziomu client_package), a następnie uruchomię gem build client_package/client_package.gemspec, pojawi się czy do pracy na początku, tworząc plik client_package-1.0.0.gem. Ale coś jest nadal nie tak. Jeśli następnie zainstaluję ten klejnot za pomocą gem install client_package-1.0.0.gem, który również będzie działał. Ale wtedy:

require 'rubygems' 
require 'client_package' 

Zwroty LoadError: no such file to load -- client_package.

Czuję, że brakuje mi czegoś małego, ale ważnego. Jakieś pomysły?

Odpowiedz

12

This'd być małe, ale ważne:

Gdyby split('\n') być split("\n")?

Bo to wygląda

[".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... 
"] 

mogłoby być tablicą zawierającą pojedynczy ciąg wielowierszowego, a nie tablicą wielu ciągów.

+1

Jestem idiotą. Dzięki! –

+3

Ja i moje uzależnienie od pojedynczych cudzysłowów =). –

32

Wymówki dla wskrzeszania tego starego wątku, ale znalazłem inną przyczynę: jeśli nie zaznaczyłeś gita, niektóre stare (usunięte pliki) mogą przeszkadzać: na dysku nie istnieją, ale git ls-files migh zgłosić je jako będąc w tym klejnocie.

Sprawdź w plikach i ten dokładny błąd się skończył.

+0

To był dokładnie nasz problem. Dziękuję Ci! – snowe

+6

Pozdrawiam @ HugoLogmans! Miałem usunięty plik, który powodował ten problem - gdy uruchomiłem 'git rm > (np. Etapowe usunięcie pliku), wtedy było dobrze - nie musiałem już tego zatwierdzać. – eebbesen

+2

w tym przypadku, nawet jeśli nie chcesz zatwierdzać, możesz po prostu zrobić 'git add .', aby polecenie gem zignorowało usunięte pliki. – Swaps

Powiązane problemy