使用Bundler创建gem

时间:2012-04-22 21:46:30

标签: ruby gem bundler

我正在尝试使用Bundler创建一个gem,遵循本指南:http://rakeroutes.com/blog/lets-write-a-gem-part-one/。在其中,它说:

  

我第一次看完gemspec后错误地想到了   当我开发我的时候,我需要添加更多的需求语句   宝石。事实并非如此:文件只需要在git中。

我正在尝试清理一些旧的宝石以使用此约定,但是当我安装我的gem时,其他文件中的类不可用。我有几个目录嵌套在我的/ lib目录下,但我不认为这将是一个问题。是否有任何简单的方法可以忽略我的其他文件?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

在链接中,当他说他不需要添加大量“require”语句时,他必须意味着将文件添加到s.filess.executabless.test_files数组 - 这些确定哪些文件打包到gem中以及哪些文件被忽略。正如您从gem规范中看到的那样,某些目录中git跟踪的内容将包含在打包的gem中。

Ruby的require是另一回事。标准要求规则仍然适用。

Ruby的gem系统的工作原理是为Ruby添加一堆不同的地方,以便在运行require "foo"时查找“foo.rb”。如果"lib"是您的gem的唯一需求路径,那么require "my_gem" Ruby只会运行 lib / my_gem.rb 中的代码。如果 lib / my_gem.rb 没有require您的gem中的任何其他文件,那么Ruby没有看到它们,因此当您尝试使用时,您将获得未定义的常量错误这些文件中的类。

例如,你可以看看我写的两个简单的宝石;两者都以bundle gemHashToHiddenFieldsSimpleStats开头。在这两个gem中, lib / 中的主要Ruby文件需要加载所有需要加载的内容才能使gem正常工作。例如,hash_to_hidden_fields.rb需要 action_view / helpers / hash_to_hidden_​​fields ,以便ActionView::Helpers::HashToHiddenFields常量+模块存在,以便我们可以将其包含在ActionView::Base中。

希望能回答这个问题。我知道Ruby需要在一段时间内对我很模糊。