我正在尝试构建一个名为client_package
的自定义gem,但它失败了。
我的目录结构如下所示:
client_package
Gemfile
Gemfile.lock
client_package.gemspec
Rakefile
Readme.md
.gitignore
.git
...git files...
lib
client_package.rb
client_package
version.rb
api.rb
...more...
我的client_package.gemspec
看起来像这样:
# encoding: UTF-8
require File.expand_path('../lib/client_package/version', __FILE__)
Gem::Specification.new do |s|
s.name = 'client_package'
s.version = ClientPackage::VERSION
s.platform = Gem::Platform::RUBY
s.files = `git ls-files`.split('\n')
s.executables = `git ls-files -- bin/*`.split('\n').map{ |f| File.basename(f) }
s.require_paths = ['lib']
# also have s.authors, s.email, s.homepage, s.summary, s.description
s.add_dependency 'httparty'
s.add_dependency 'json'
end
我的所有文件都已提交,并且git状态是干净的。
在顶部client_package
目录中,我运行gem build client_package.gemspec
并收到此错误:
ERROR: While executing gem ... (Gem::InvalidSpecificationException)
[".gitignore
Gemfile
Rakefile
Readme.md
client_package.gemspec
lib/client_package.rb
lib/client_package/api.rb
lib/client_package/version.rb
lib/client_package/...more...
"] are not files
这对我来说很困惑,因为那些肯定似乎是我的档案。无论如何,我认为如果它没有看到这些文件会有一些路径问题,只是做了一些试验和错误我发现如果我上一个目录(一个在顶级client_package
之上)然后运行{{ 1}} 一开始似乎工作,创建文件gem build client_package/client_package.gemspec
。但有些事情仍然是错误的。如果我然后用client_package-1.0.0.gem
安装那个似乎也可以工作的宝石。但接下来:
gem install client_package-1.0.0.gem
返回require 'rubygems'
require 'client_package'
。
我觉得我必须错过一些小而重要的东西。有什么想法吗?
答案 0 :(得分:43)
恢复这个旧线程的借口,但我找到了另一个原因:如果你没有检查git,一些旧的(已删除的文件)可能会干扰:在磁盘上它们不存在,但是git ls-files会将它们报告为包含在宝石中。
检入文件,这个确切的错误已经结束。
答案 1 :(得分:15)
这很小但很重要:
split('\n')
应split("\n")
吗?
因为它看起来像
[".gitignore
Gemfile
Rakefile
Readme.md
client_package.gemspec
lib/client_package.rb
lib/client_package/api.rb
lib/client_package/version.rb
lib/client_package/...more...
"]
可以是包含单个多行字符串的数组,而不是包含多个字符串的数组。