构建后Gem中缺少文件

时间:2013-06-04 15:56:02

标签: ruby gem bundler

TL; DR:

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

原始问题:

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

http://net.tutsplus.com/tutorials/ruby/gem-creation-with-bundler/

作为最后一步,我运行了gem build .gemspec

这成功了,但是当我安装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

编辑2 /分辨率

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

一点历史...我最初创建代码并在考虑制作宝石之前提交了它(这是我的第一个宝石)。然后我在原始存储库中使用了里面的,它没有抱怨,但可能是这种奇怪的原因。

1 个答案:

答案 0 :(得分:25)

bundler为你做的一件事就是启动一个本地git repo来版本管理你的gem代码。检查您是否已在git

中添加了该文件
git add lib/gem_name/missing_file.rb

Bundler生成的gems在内部使用git来跟踪gem的源文件的“成员资格”。你可以在.gemspec中看到这个,它使用反引号来调用git并生成一个文件列表:

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

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

中列出的内容