Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trying to build a gem, getting a Gem::InvalidSpecificationException: "[...] are not files"

Tags:

I'm trying to build a custom gem I wrote called client_package but it is failing.

My directory structure looks like this:

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

And my client_package.gemspec looks like this:

# 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 

And all my files are committed and the git state is clean.

From within the top client_package directory, I run gem build client_package.gemspec and get this 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 

This is puzzling to me, because those certainly seem to be files to me. Anyway, I figured there is some path problem if it's not seeing these files, and just doing some trial and error I discovered that if I go up a directory (one above the top-level client_package) and then run gem build client_package/client_package.gemspec it does appear to work at first, creating the file client_package-1.0.0.gem. But something is still wrong. If I then install that gem with gem install client_package-1.0.0.gem that also appears to work. But then this:

require 'rubygems' require 'client_package' 

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

I feel like I must be missing something small but important. Any ideas?

like image 800
Ben Lee Avatar asked Oct 18 '11 23:10

Ben Lee


1 Answers

Excuses for resurrecting this old thread, but I found another cause: if you did not check in git, some old (deleted files) might interfere: on disk they do not exist, but git ls-files migh report them as being included in the gem.

Check in the files and this exact error is over.

like image 189
Hugo Logmans Avatar answered Oct 02 '22 13:10

Hugo Logmans