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

时间:2018-08-24 03:58:20

标签: ruby-on-rails ruby rubygems

我使用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

这是目录结构的样子:

Dir structure

但是,当我构建它时,它会生成一个非常小的.gem文件。如果我随后安装了该gem,然后去查看安装它的文件夹,则该文件夹将完全空着-里面什么也没有。

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

2 个答案:

答案 0 :(得分:2)

在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

答案 1 :(得分:1)

作为已接受答案的补充,典型的方法是使文件列表与已提交的git文件同步。这是Bundler生成规范文件相关部分的方式:

  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或由于某种奇怪的原因而没有安装它,请忽略此操作。