Ruby

    Ruby

     ruby是一种面向对象、命令式、函数式、动态式的编程语言,在20世纪90年代中期由日本人松本行弘(Matz)设计并开发。

     ruby语言特点:

1.开源,跨平台

2.脚本语言,无需编译直接运行

3.自然简洁的语法

4.一切皆是对象

5.灵活的语言设计(使用者可以随意改变原始设计)

6.强大的block和closures

7.继承和mixin

8.RubyGem

    rvm

    Ruby Version Manager,Ruby版本管理器,包括Ruby的版本管理和Gem库管理(gemset)。目前支持Ruby的大多数版本,通过RVM可以很方便的在多个Ruby版本中快速切换。RVM同时 也支持JRuby。

    gem

    Gem是封装起来的Ruby应用程序或代码库.

    Gemset

    如果你知道Ruby有各种Gem可以安装,那Gemset就像一个一个菜篮一样,每次安装Gemset就像放一个gem到菜篮里,使用者可以有不同的菜篮,放入不同的Gem ,借此可以测试各种相容性问题。 

    RubyGems

    RubyGems是一个方便而强大的Ruby程序包管理器( package manager),类似RedHat的RPM.它将一个Ruby应用程序打包到一个gem里,作为一个安装单元。无需安装,最新的Ruby版本已经包含RubyGems了

 

    bundle

    相当于多个RubyGems批处理运行。在配置文件gemfilel里说明你的应用依赖哪些第三方包,他自动帮你下载安装多个包,并且会下载这些包依赖的包

 

bundle和Gemfile

 
       这个命令也可以安装ruby软件. 比如用rails新创建一个项目的时候, 会在最后执行bundle install命令去安装软件. 这里是官网:  http://gembundler.com/
那么bundle install和gem install的区别是什么呢? 我的理解是: bundle是用来管理维护项目的软件包的; gem则是用来管理具体的每一个软件包的. 
 
项目的根目录会有一个Gemfile, 里面定义了该项目的软件包依赖的相关事项. 发现它默认是从rubygems.org这个网站获取内容的. 我想把源换成taobao.org. 可以修改Gemfile文件. 把source那一行改成: source 'http://ruby.taobao.org/'
 
实际上Gemfile就相当于我之前写Python代码时写的requires.txt文件, 里面放的是当前软件所依赖的软件包. bundle install 这个命令会读取Gemfile中的内容并安装升级相应的软件(相当于python中的pip install -r requires.txt命令)
 
对软件包版本的控制
  1. 默认就是安装最新版: gem 'sqlite3'
  2. 可以显式地声明版本号: gem 'sqlite3', '1.3.5'
  3. 强制升级: gem 'sqlite3' '>= 1.3.5'
  4. 只升级小版本: gem 'sqlite3' '~> 1.3.5'
 
bundle install执行完之后, 会把当前的软件包环境做一个快照, 放到Gemfile.lock文件中. 如果不删除Gemfile.lock文件, 相关的gem是不会自动升级到最新版本的. 比如我一开始用的是rails 3.2.2, 当3.2.3出来之后, 要么我得在Gemfile中显式地声明版本号, 要么我就删除Gemfile.lock文件. 否则我就无法使用最新的rails. 我想这就是为什么这个文件被称为是.lock文件.
 
bundle exec [command] 表示使用Gemfile中的指定的软件来执行command. 比如bundle exec rake db:migrate. Ruby可以通过rvm和gemset来组织运行环境, 多个运行环境可以并存不冲突, 每个ruby项目也都可以定义自己需要的gem软件的版本. 为了不搞混掉, 可以明确地通过bundle exec来调用当前项目指定的软件命令.
如果不想每次都在前面加上bundle exec, 可以这样配置:
  • chmod +x $rvm_path/hooks/after_cd_bundler
    • 赋予 $rvm_path/hooks/after_cd_bundler 脚本可执行权限
  • bundle --binstubs=./bundler_stubs
    • 创建看了bundler_stubs目录, 把当前环境的可执行命令全都放到了这个目录
  • 上面的两个命令结合起来, 就会非常神奇地保证每个命令都是在正确的环境下执行的.
  • 不推荐将bundler_stubs文件签入版本控制, 所以最好把它加入.gitignore
  • 如果项目中引入了新的可执行程序, 需要再次执行命令: bundle --binstubs=./bundler_stubs. 目的当然是把这个新的程序放入bundler_stubs目录
 
bundler配置文件:
  • 项目特定配置文件, 放在项目根目录下的.bundle/config文件中.
  • 全局的配置文件, 放在 ~/.bundle/config文件中.
比如你在当前项目运行bundle install --without production, 后面的参数"--withou production"会自动被保存到项目根目录的.bundle/config文件中. 下一次运行bundle install会自动为你加上参数.

你可能感兴趣的:(如果你知道)