2011-06-06 9 views
15

Estoy intentando construir una gema de rubí alrededor de una extensión C. La extensión C compila bien usando la rutina ruby extconf.rb; make; sudo make install, pero cuando intento construir una gema usando rastrillo, el proceso termina con el error en la parte inferior de este rastro.Mientras se ejecuta gem ... ["extconf.rb", ...] no son archivos

Estoy usando la publicación here, con la misma estructura de directorios, para crear la gema.

¿Qué pasa con mi configuración? Mi gemspec y Rakefile están debajo del rastro (la gema se llama netconf).

// Traza

** Execute copy:netconf:i686-linux:1.9.2 
install -c tmp/i686-linux/netconf/1.9.2/netconf.so lib/netconf/netconf.so 
** Execute compile:netconf:i686-linux 
** Execute compile:i686-linux 
** Execute compile 
** Invoke chmod (first_time) 
** Execute chmod 
** Execute build 
rake aborted! 
ERROR: While executing gem ... (Gem::InvalidSpecificationException) 
    ["extconf.rb", "netconf.o", "netconf.so"] are not files 

// netconf.gemspec

# -*- encoding: utf-8 -*- 
$:.push File.expand_path("../lib", __FILE__) 
require "netconf/version" 

Gem::Specification.new do |s| 
    s.name  = "netconf" 
    s.version  = Netconf::VERSION 
    s.authors  = ["..."] 
    s.email  = ["..."] 
    s.homepage = "..." 
    s.summary  = %q{A tool to access and write Ubuntu network configuration} 
    s.description = %q{Uses ifconfig and other C system calls to access network configurations on a Ubuntu install.} 

    s.rubyforge_project = "netconf" 

    s.files   = `git ls-files`.split("\n") 
    s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) } 
    s.require_paths = ["lib"] 
    s.extensions = ["ext/netconf/extconf.rb"] 
end 

// Rakefile

require 'rake' 
require 'rake/extensiontask' 
require 'bundler' 

Rake::ExtensionTask.new("netconf") do |extension| 
    extension.lib_dir = "lib/netconf" 
end 

task :chmod do 
    File.chmod(0775, 'lib/netconf/netconf.so') 
end 

task :build => [:clean, :compile, :chmod] 

Bundler::GemHelper.install_tasks 
+0

[Esto] (http://stackoverflow.com/questions/1314827/how-do-i-wrap-up-a-ruby-c-extension-in-a-ruby-gem) puede ser relevante –

+0

I vio esa pregunta; gracias por la cabeza, sin embargo. Estoy usando rake-compiler, pero no he podido encontrar ninguna información sobre este error en particular (y estoy bastante seguro de que necesito/quiero una extensión C nativa ya que estoy apuntando a una única plataforma incrustada). –

Respuesta

37

Tengo este error porque no había cometido mis actualizaciones con git todavía.

s.files   = `git ls-files`.split("\n") 

Esa línea está directamente usando git, y probablemente esté causando este error. Sólo hacer

git add . 
git commit -a -m "init" 
+3

gracias por compartir esto, me has ahorrado muchos dolores de cabeza. tener los archivos en etapas (no necesariamente comprometido era todo lo que se necesitaba para mí^_ ^) – lfender6445

0

Fwiw, tuve un problema similar donde

s.files   = `git ls-files`.split("\n") 

fue

s.files   = `git ls-files`.split('\n') 

, donde las comillas simples estaban impidiendo la lista de archivos de dividir correctamente. Cambiar a comillas dobles me solucionó el problema.

Cuestiones relacionadas