我使用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的新手,因此可以提供的任何指导都将不胜感激。
答案 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
或由于某种奇怪的原因而没有安装它,请忽略此操作。