Rails Gem和Engine


RubyGems

RubyGems 是Ruby的一个包管理器,它提供一个分发Ruby程序和库的标准格式,还提供一个管理程序包安装的工具。

RubyGems 旨在方便地管理gem安装的工具,以及用于分发gem的服务器。这类似Ubuntu下的apt-get,Centos的yum,Python的pip。

gem 包的构建

gem命令也被用来构建和维护.gemspec和.gem文件。
利用.gemspec文件构建.gem:
gem build mygem.gemspec

Gemfile指定gem来源的四种方式

Gemfile的作用无非就是告诉bundler你的项目具体都需要哪些gem,
这些gem都需要哪些版本,以及从哪获取这些gem,总的来说,gem的来源可以有四种:

  1. 从镜像源安装 source 'https://rubygems.org' gem 'rails' # this gem will be installed from https://rubygems.org
  2. 从git代码库安装 gem 'nokogiri', :git => 'git://github.com/tenderlove/nokogiri.git'
  3. 从github安装 gem 'refinerycms', github: 'refinery/refinerycms', branch: 'master'
  4. 从文件系统中安装 gem "rails", :path => "vendor/rails"

参考: https://segmentfault.com/a/1190000000758517


Rails:Engine介绍

Engine可以看成一个简洁版的rails, Rails::Application 就是继承自 Rails::Engine, engine也可以嵌入到rails中,现在的很多gem就是利用engine的特性,实现rails功能的快速扩展,比如很出名devise用户系统就是基于engine,装上系统包后就自动拥有了用户系统,包括登录注册等功能。

Rails:Engine还分为两种,一种是需要附属于rails的engine,需要在routes.rb里面配置 mount App::Engine => ‘/app’这样的语句,这种属于mountable类型的engine,还有一种不需要mount的直接gemfile包含就可以正常使用的叫做full类型的engine,他有自己的routes.rb.

基于Rails:Engine的系统拆分,就是把各个系统共用的代码以及逻辑放在engine里,整合成一个gem包,比如model层的代码以及用户系统,就可以完全放在engine的包里,这里把这个engine包成为core,即核心代码所在处,然后每个系统都是单独的rails工程,可以独立开发,独立部署,但都继承了core的核心代码,方便了代码维护以及降低了部署风险,各个系统互不影响,可以部署在不同的服务器上,只要连着相同的数据库即可。
阅读量: 499
发布于:
修改于: