Ruby 使用“bundle gem floob”时,为什么要创建与gem同名的目录?

Ruby 使用“bundle gem floob”时,为什么要创建与gem同名的目录?,ruby,rubygems,bundler,setup-project,directory-structure,Ruby,Rubygems,Bundler,Setup Project,Directory Structure,我正在做我的第一颗宝石。我们假设它被称为floob。例如:b 为什么bundle gem会为一个gem创建两个同名目录?例如:/floob/lib/floob/ 我是否将大部分代码放在/lib/floob/中(与version.rb文件一起) 使用gem名称创建的文件的用途是什么? 例如:/floob/lib/floob.rb 唯一运行的命令是bundle gem 我想澄清一下所有floob~之间的关系。之所以采用这种“两层”结构,是因为/floob/lib最终将是添加到Rubyrequire加

我正在做我的第一颗宝石。我们假设它被称为
floob
。例如:
b

为什么
bundle gem
会为一个gem创建两个同名目录?例如:
/floob/lib/floob/

我是否将大部分代码放在
/lib/floob/
中(与
version.rb
文件一起)

使用gem名称创建的文件的用途是什么? 例如:
/floob/lib/floob.rb

唯一运行的命令是
bundle gem

我想澄清一下所有
floob
~

之间的关系。之所以采用这种“两层”结构,是因为
/floob/lib
最终将是添加到Ruby
require
加载路径的文件夹

这样,如果将
floob.rb
放入
/floob/lib
中,则可以使用以下内容加载它:

require 'floob' 
这还提供了将子组件(如
version.rb
)放入
/floob/lib/floob
中,从而在
floob
命名空间下进行分离的机会。这意味着您现在可以执行以下操作:

require 'floob/version'
require 'floob/base'
require 'floob/core'
etc..
如果将
/floob
直接添加到加载路径,则很难将代码与
自述文件、gempec或其他资产(如图像、二进制blob、YAML设置文件或
bin
存根)分开

现在,实际代码将保存在
lib
下,其他所有内容都可以很好地放在
/floob
下的文件夹中,而不会影响代码或加载路径功能

还请注意,在大多数情况下,您不应该将
floob.rb
以外的任何内容放入
/floob/lib
,因为否则您将污染全局加载路径命名空间。相反,所有其余的代码都应该放在
/floob/lib/floob
中,然后将
require
代码放在
floob.rb
中以加载这些文件,如上文所述


通过这种方式,您可以保持加载路径干净,并且组件彼此之间可以很好地分离。

bundle安装在何时何地创建此文件夹结构?请说得更具体些。你运行了什么命令?在哪里运行的?我在命令上弄错了它是
bundle gem
。我已经相应地更新了帖子。