繁体   English   中英

'gem build'之后,Ruby Gem .gem为空

[英]Ruby Gem .gem is empty after 'gem build'

我使用Swagger CodeGen生成了API的Ruby客户端。 生成的.gemspec文件如下所示:

# -*- encoding: utf-8 -*-
#
=begin
#convertapi

#Convert API lets you effortlessly convert file formats and types.

OpenAPI spec version: v1

Generated by: https://github.com/swagger-api/swagger-codegen.git
Swagger Codegen version: unset

=end

$:.push File.expand_path("../lib", __FILE__)
require "cloudmersiveConvertApiClient/version"

Gem::Specification.new do |s|
  s.name        = "cloudmersiveConvertApiClient"
  s.version     = CloudmersiveConvertApiClient::VERSION
  s.platform    = Gem::Platform::RUBY
  s.authors     = ["Cloudmersive"]
  s.email       = [""]
  s.homepage    = "https://www.cloudmersive.com/convert-api"
  s.summary     = "Convert API lets you effortlessly convert file formats and types."
  s.description = "Convert files and content between file formats. Convert data between file formats. Instantly."
  s.license     = "Apache 2.0"
  s.required_ruby_version = ">= 1.9"

  s.add_runtime_dependency 'typhoeus', '~> 1.0', '>= 1.0.1'
  s.add_runtime_dependency 'json', '~> 2.1', '>= 2.1.0'

  s.add_development_dependency 'rspec', '~> 3.6', '>= 3.6.0'
  s.add_development_dependency 'vcr', '~> 3.0', '>= 3.0.1'
  s.add_development_dependency 'webmock', '~> 1.24', '>= 1.24.3'
  s.add_development_dependency 'autotest', '~> 4.4', '>= 4.4.6'
  s.add_development_dependency 'autotest-rails-pure', '~> 4.1', '>= 4.1.2'
  s.add_development_dependency 'autotest-growl', '~> 0.2', '>= 0.2.16'
  s.add_development_dependency 'autotest-fsevent', '~> 0.2', '>= 0.2.12'

  s.files         = `find *`.split("\n").uniq.sort.select{|f| !f.empty? }
  s.test_files    = `find spec/*`.split("\n")
  s.executables   = []
  s.require_paths = ["lib"]
end

目录结构如下所示:

目录结构

但是,当我构建它时,它会生成一个非常小的.gem文件。 如果我随后安装了该gem,然后转到安装它的文件夹中,则该文件夹将显示为空-里面没有东西。

任何想法为什么会发生这种情况? Ruby的新手,因此您可以提供的任何指导都将不胜感激。

在Windows操作系统上,以下两行显然不起作用:

s.files         = `find *`.split("\n").uniq.sort.select{|f| !f.empty? }
s.test_files    = `find spec/*`.split("\n")

它们用于从当前目录结构中生成文件数组(源和测试)。 两者都调用系统来执行find命令,这在Windows中不太可能发生。 要解决该问题(因为您的gem相对较小),只需手动列出所有文件,或者使用Dir#[]或使用任何unix来构建gem 像这样的东西应该起作用(未经测试):

s.files = Dir['./**/*'] # .select { |f| ... } # condition to include file

就像附加已接受的答案一样,典型的方法是使文件列表与提交的git文件同步。 这是Bundler如何生成spec文件的相关部分的方式:

  spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
    `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
  end

这显然很方便,因为可以通过.gitignore等轻松控制它。如果不使用git或由于某些奇怪的原因而没有安装它,请忽略此设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM