Tratando de construir una gema, obtener una gema :: InvalidSpecificationException: [...] no son archivos"
Pregunta
Estoy tratando de construir una joya personalizada que escribí llamado client_package
Pero está fallando.
Mi estructura de directorio se ve así:
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...
Y mi client_package.gemspec
Se ve como esto:
# 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
Y todos mis archivos están cometidos y el estado GIT está limpio.
Desde dentro de la parte superior client_package
directorio, ejecuto gem build client_package.gemspec
y obtenga este error:
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
Esto es desconcertante para mí, porque ciertamente me parecen ser archivos. De todos modos, pensé que hay algún problema de ruta si no está viendo estos archivos, y solo haciendo una prueba y error descubrí que si subo un directorio (uno por encima del nivel superior client_package
) y luego corre gem build client_package/client_package.gemspec
eso lo hace Parece funcionar al principio, creando el archivo client_package-1.0.0.gem
. Pero algo todavía está mal. Si luego instalo esa gema con gem install client_package-1.0.0.gem
Eso también parece funcionar. Pero entonces esto:
require 'rubygems'
require 'client_package'
Devoluciones LoadError: no such file to load -- client_package
.
Siento que me falta algo pequeño pero importante. ¿Algunas ideas?
Solución
Esto sería pequeño pero importante:
Debería split('\n')
ser split("\n")
?
Porque parece
[".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...
"]
Podría ser una matriz que contiene una sola cadena multilínea, no una matriz de múltiples cadenas.
Otros consejos
Excusas para resucitar este hilo antiguo, pero encontré otra causa: si no se registró en Git, algunos viejos (archivos eliminados) podrían interferir: en el disco no existen, pero Git Ls-Files Migh los informa como incluidos en el joya.
Verifique los archivos y este error exacto ha terminado.