Gem vs Lib in Rails

首先,需要回顾几个概念,第一个就是Rails 2.x时代的Plugins,还有Rails中的自动加载autoload

Plugins

那时,为了对共用代码进行管理,通常的作法是将自己、第三方库下载到本地,放到vendor/plugins/下,由于这个很不方便库的管理和升级,这种作法在3.2.0-rc2中首次提出被废弃,并在4的时代完全被移除。

Rails 3.2.0 - 1.2 Railties :: Rails 2.3-style plugins in vendor/plugins are deprecated and will be removed in Rails 4.0. Move them out of vendor/plugins and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb.

http://blog.remarkablelabs.com/2012/12/rails-plugin-reaches-end-of-life-rails-4-countdown-to-2013

New Plugins

在新的Rails中,Plugins其实就是一个Gem包,你可以很方便的创建一个Gem包,并将其发布到Github/RubyGems,然后在Rails中通过Gemfile来引用。

制作方法

Autoload

Rails autoloading — how it works, and when it doesn’t

当我把一个开源的Gem进行修改时,为了方便,便将其复制到了Rails/lib目录,按照对Autoload的理解,这个应该能够立即执行的操作,却错误连连。于是开始深挖,关于Rails Autoload

Hello,可以问你一个Rails问题吗?关于Gem和Lib的。

我写了一个Plugins,如果用gem xxx的方式引用,就是正确的,但我把这些内容复制到Rails/lib目录下,它就不能正确初始化。

一直觉得这2种之前只没有区别的,还是Rails对Gem做了什么事情,方便的话给我讲下,我搜索了下,没找到这

REF::