При выполнении gem... [ "extconf.rb",...] не являются файлами
Я пытаюсь создать рубиновый камень вокруг расширения C. Расширение C отлично компилируется с помощью процедуры ruby extconf.rb; make; sudo make install
, но когда я пытаюсь построить драгоценный камень с использованием грабли, процесс заканчивается ошибкой в нижней части этой трассировки.
Я использую сообщение здесь, с той же структурой каталогов, чтобы создать драгоценный камень.
Что случилось с моей конфигурацией? Мой gemspec и Rakefile находятся ниже трассы (драгоценный камень называется netconf).
//Трассировка
** 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
Ответы
Ответ 1
Я получил эту ошибку, потому что я еще не выполнял обновления с помощью git.
s.files = `git ls-files`.split("\n")
Эта строка напрямую использует git и, вероятно, вызывает эту ошибку. Просто сделайте
git add .
git commit -a -m "init"
Ответ 2
FWIW, у меня была аналогичная проблема, когда
s.files = `git ls-files`.split("\n")
был
s.files = `git ls-files`.split('\n')
где одиночные кавычки препятствовали правильному расщеплению списка файлов. Переход на двойные кавычки исправил проблему для меня.