首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行gem时...["extconf.rb",...]不是文件

执行gem时...["extconf.rb",...]不是文件
EN

Stack Overflow用户
提问于 2011-06-07 03:03:04
回答 2查看 6K关注 0票数 20

我正在尝试围绕一个C扩展构建一个ruby gem。使用ruby extconf.rb; make; sudo make install例程可以很好地编译C扩展,但是当我尝试使用rake构建gem时,该过程会终止,并在此跟踪的底部显示错误。

我使用具有相同目录结构的post here来创建gem。

我的配置有什么问题?我的gemspec和Rakefile位于跟踪之下( gem称为netconf)。

//跟踪

代码语言:javascript
复制
** 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

代码语言:javascript
复制
# -*- 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

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2011-10-03 11:58:33

我收到这个错误是因为我还没有用git提交我的更新。

代码语言:javascript
复制
s.files         = `git ls-files`.split("\n")

这行代码直接使用了git,可能会导致这个错误。只管去做

代码语言:javascript
复制
git add .
git commit -a -m "init"
票数 50
EN

Stack Overflow用户

发布于 2017-05-18 22:36:15

顺便说一句,我也遇到过类似的问题

代码语言:javascript
复制
s.files         = `git ls-files`.split("\n")

曾经是

代码语言:javascript
复制
s.files         = `git ls-files`.split('\n')

,其中的单引号阻止文件列表正确拆分。更改为双引号为我修复了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6256743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档