git Ruby Gem不会生成:Gem::无效规范异常[...]不是文件

lnlaulya  于 2023-02-14  发布在  Git
关注(0)|答案(3)|浏览(170)

我试图建立一个宝石,但我不断得到:

WARNING:  See http://guides.rubygems.org/specification-reference/ for help
ERROR:  While executing gem ... (Gem::InvalidSpecificationException)
  [*list of about 300 file paths*]
are not files

我知道这些文件必须被添加到git中,我已经这样做了,所有的东西都是最新的。
让我印象深刻的是,列表中的文件路径是一个子目录的路径,但该路径缺少几个文件夹。
示例:

In list: bin/some_file.jar
Actual file: bin/some_library/lib/some_file.jar

我怀疑这与我的git是如何设置的有关,因为我的gem在一个"mother git folder"里,这个文件夹里有几个项目,包括几个gem,如下所示:

Mother Folder
  -> .git
  -> GemFolder1
  -> GemFolder2
  -> SomeOtherProject

看来,我是漫步都建立和安装gem1,但gem2给我这些错误。
最初我有一个文件夹名为.的文件夹,所以我认为这是问题所在,所以我重命名了这个文件夹,将所有的修改添加到git中,然后重试,但是,我仍然遇到了同样的问题。
我觉得这很奇怪,这让我怀疑宝石本身有一些奇怪的bug。
另外,当我手动运行

`git ls-files -z`.split("\x0")

在Ruby中,显示为"不是文件"的文件最初甚至不存在于这个列表中。
这是怎么回事?

ymzxtsji

ymzxtsji1#

我知道是什么原因了:
我的gemspec文件中有默认设置,这将创建以下行:

spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }

发生的情况是bin文件夹内的子文件夹中的任何文件都将从文件路径中剥离,因此bin/some_folder/some.executable将转换为bin/some.executable
在我看来,这是bundler默认设置中的一个错误。
因为我有一个非常小的宝石,我简单地解决了这个问题,写:

spec.executables   = []

我相信我不需要将我的文件注册为可执行文件(我可能错了)。
你也可以这样写:

spec.files.grep(%r{^bin/}) { |f| f[3..-1] }

对于大多数人来说,这是一个更合适的解决方案。对我来说,它没有工作,因为我有一些非可执行文件在那里造成的问题。
希望这对外面的人有帮助:)

n6lpvg4x

n6lpvg4x2#

我的问题是

s.files         = `git ls-files`.split("\n")

最初被写成

s.files         = `git ls-files`.split('\n')

...用单引号。改变它为我修复了它,虽然不知道它为什么一开始就坏了...

pgpifvop

pgpifvop3#

重命名gem包后,我遇到了同样的问题。

对我来说解决了什么:
1 -读取生成的gemspec

# Specify which files should be added to the gem when it is released.
 # The `git ls-files -z` loads the files in the RubyGem that have been added into git.

2 -运行

git add YOUR_EDITED_FILES # or git add .
git commit -m "ENTER_A_MESSAGE_DESCRIPTION_FOR_YOUR_COMMIT"

3 -打造您的宝石

gem build your_gem.gemspec

相关问题