Ruby 生成后Gem中缺少文件

Ruby 生成后Gem中缺少文件,ruby,gem,bundler,Ruby,Gem,Bundler,TL;医生: 不要在现有git存储库中运行bundle。奇怪的事情会在没有任何错误消息的情况下发生 原始问题: 通过调整本教程中的步骤,我构建了一个gem: 最后一步,我运行了gem build.gempec 这是成功的,但是当我安装gem时,我发现包含我的代码的关键文件不在gem中。同一(lib)目录中的另一个文件“version.rb”确实存在于gem中 我不知道如何开始调试…bundler/gem build如何决定要在gem中包含哪些文件 编辑: 我的工作流程是: gem build

TL;医生:

不要在现有git存储库中运行bundle。奇怪的事情会在没有任何错误消息的情况下发生

原始问题:

通过调整本教程中的步骤,我构建了一个gem:

最后一步,我运行了gem build.gempec

这是成功的,但是当我安装gem时,我发现包含我的代码的关键文件不在gem中。同一(lib)目录中的另一个文件“version.rb”确实存在于gem中

我不知道如何开始调试…bundler/gem build如何决定要在gem中包含哪些文件

编辑:

我的工作流程是:

gem build <project_name>.gemspec
gem unpack <project_name>
=> confirm file does not exist in <unpacked>/lib/

gem install <project name>
=> confirm file structure in ~/home/stefan/.rvm/... contains gem, but does not contain desired file
gem build.gemspec
宝石拆包
=>确认文件在/lib中不存在/
宝石安装
=>确认~/home/stefan/.rvm/.中的文件结构。。。包含gem,但不包含所需的文件
编辑2/分辨率

通过将所有代码提交到远程存储库,创建一个干净的克隆,并构建gem,我终于能够实现这一点。新的gem包含了所有必需的文件


有一点历史…我最初创建了代码,并在考虑制作gem之前提交了它(这是我的第一个gem)。然后,我在原始存储库中使用了bundle,这并没有引起任何抱怨,但可能是造成这种奇怪的原因

bundler为您做的一件事是启动本地git repo来管理您的gem代码。检查是否已在git中添加该文件

git add lib/gem_name/missing_file.rb
Bundler生成的gem在内部使用git跟踪gem源文件的“成员身份”。您可以在.gemspec中看到这一点,它使用backticks调用git并生成文件列表:

gem.files         = `git ls-files`.split($/)

注意这也意味着您应该注意您在
.gitignore

中列出的内容。git中缺少该文件。但是我现在添加了它并重建了宝石。同样的结果。我还做了一个git ls文件,它显示了这个文件和我的所有测试文件。这些都不包括在gem中。您是否使用rake任务来安装gem
rake安装
使用托管位置执行
gem构建
gem安装
gem build name.gemspec
不进行安装,它只是在当前文件夹中创建
name-x.y.z.gem
,并使用工作流更新问题。我从未使用过rake install,但我确信在安装之前,原始gem中不存在该文件。我不确定您还会出什么问题
gem build
应该打包
.gempec
中列出的所有文件,它没有任何其他方法知道要包含哪些文件。认为它值得检查:当它由
bundler
创建时,您是否按原样使用gempec?您是否确定正在获取最新的生成文件(在运行生成后执行
ls
并检查日期/时间,以防文件上的标识错误)?并不是说你们做错了这些,只是这是一个奇怪的错误,我并没有更好的(还没有)看到更新的问题的解决办法。我接受了你的回答,因为它有助于理解捆绑包的工作原理。谢谢你的帮助。我已经用我系统上的一个gem确认,使用
gem build project\u name.gempec;gem unpack project_name-x.y.z.gem
应包含并解压缩最近添加的文件,通常不需要额外的工作或检查。从您的工作流程描述中,我无法判断是什么原因导致了与预期行为的差异。这可能为我节省了10个小时的时间。我喜欢堆栈溢出。