Ruby

522 阅读4分钟

ruby

ruby是一个可执行文件,

which ruby //查看ruby存放路径

rvm

rvm 全称是ruby version manager,是用来管理ruby版本的工具,默认只能安装一个版本的ruby,通过rvm就可以安装多个版本的ruby并且可以切换想使用的版本

rvm安装

  • ruby-china.org/wiki/rvm-gu…

  • 百度搜RVM首页,给出的安装方式 curl -L https://get.rvm.io | bash -s stable

  • 最后执行  source ~/.rvm/scripts/rvm

rvm list //查看已经安装的本地版本
rvm use 2.4.1 --default //切换版本
rvm list know //rvm能够管理的的ruby版本
rvm instal ruby --head //安装rvm能够安装的最新版本
rvm remove 1.8.7 // rvm 卸载 一个已安装版本
rvm gemset list //列出

gem

Gem是基于Ruby的一些开发工具包,大部分代码库以gem形式发布,RubyGems用来创建、分享、安装这些代码库

gem 安装ruby包路径

gem install cocoapods
//查看gem paths

which pod 或 gem env  

//ruby 包路径
/Users/yutangzhao/.rvm/gems/ruby-2.7.2/bin/pod 

// gem path
/Users/yutangzhao/.rvm/gems/ruby-2.7.2/gems/cocoapods-1.11.3 

//注意:不同ruby版本存放包路径是不一样的

gemset

  • 一个gemset就是就是一个gems目录下的抽象
  • 使用不同的gemset,ruby包的路径也不一样
  • gem env 查看当前ruby下的gemset
rvm gemset list
rvm gemset use defalut

//defalut
// /Users/yutangzhao/.rvm/gems/ruby-2.7.2

//global
// /Users/yutangzhao/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0

//tangge
// /Users/yutangzhao/.rvm/gems/ruby-2.7.2@tangge

制定一个独立路径存放ruby包

  • 不想被其他目录下已存在各种ruby包污染
  • 制造一个干净的gems软件包目录
  • rvm gemset 可以办到
//1.切换到制定版本的ruby下
rvm use 2.7.2 --default 

//2.创建gemset
rvm gemset create tangge

//3.使用gemset
rvm gemset use tangge

gemset 其他命令

rvm gemset delete xxx //输入要删除的gemset
rvm gemset empty xxx //清空当前gemset环境下的所有ruby包

Bundler

能够跟踪并安装所需的特定版本的gem,来为Ruby项目提供一致的运行环境

image.png

source 'https://rubygems.org'

gem 'cocoapods', path: './CocoaPods'
gem 'ruby-debug-ide'
gem 'debase'

bundle安装

gem install bundle
gem install bundle -v "=2.1.4" #安装指定版本的bundle

#查看bundle版本
bundle -v

#查看更多bundle命令
bundle -h

#卸载bundle
gem uninstall bundle

#gem包安装信息
bundle info xcodeproj

#打印Gem.lock信息
bundle env

#bundle config
bundle config mirror.https://rubygems.org https://rubygems-mirror.org

#打开一个gem包
bundle info xcodeproj
#需要设置EDITOR或BUNDLEER_EDITOR环境变量
export EDITOR=code
#sublime
export EDITOR='subl -w'

Bundler 环境继承给子进程的问题

默认使用的是自己bundle的环境

#1.可以写多条命令
Bundle.with_clean_env do
system 'cd User/hanghang/rubyApp; bundle exec ruby main.rb'
end

#2.只能执行一条命令
Bundle.clean_system('')
#3.只能执行一条命令
Bundle.clean_exec('')

bundle 一次性安装依赖

#1.创建一个工作目录
mkdir ruby_app
cd ruby_app

#2.初始化bundle
bundle init

#3.编辑Gemfile 添加依赖
gem "xcodeproj", '>= 1.17.0' ,'< 2.0'

#4.通过bundle安装依赖
bundle install #bundle _2.1.2_ install 指定版本安装

#5. 添加main.rb
require 'xcodeproj'
project_path = '/Users/yutangzhao/Movies/PadZone/PadZone.xcodeproj'
project = Xcodeproj::Project.open(project_path)
project.targets.each do |target|
puts target.name
end 

#6.通过bundle来执行
bundle exec ruby main.rb #只能在 Gemfile 所在的目录、子目录下,执行 bundle exec

Gemfile

==================引用远程gem===================
#1.指定源
source "https://gems.ruby-china.com" #全局source
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

#通过版本号引用
gem 'nokogiri'
gem 'rails' ,'5.0.0'
gem 'rack' , '>=1.0'
gem 'thin', '~>1.1' #=> >=1.1 && <=2.0
#建议这样写法
gem "xcodeproj", '>= 1.17.0' ,'< 2.0'
gem 'cocoapods' #=> source 告诉cocoapods.gemspec文件去哪里搜索
#通过指定git引用gem包
gem 'rack', git:'https://github.com/rack/rack', branch: 'master'


#2.指定源 source block
source 'https://gems.ruby-china.com' do
 gem 'xxx'
 gem 'cocoapods'
 ...
end

#3.指定源
gem 'cocoapods' ,source:'https://gems.ruby-china.com'

==================引用本地gem local path ===================
#1.第一种方式
gem 'extracted_library' , :path => './vendor/extracted_library'

#2.第二种方式
path '/User/hanghang/Desktop/component' do

gem 'admui_ui' #=> admui_ui.gemspec
gem 'publik_ui' #=> publik_ui.gemspec
end

Gemfile高阶用法

1.通过不同的group管理gem依赖

#source "https://rubygems.org"
source "https://gems.ruby-china.com"

#:default group
gem 'dotenv'

#:development group
gem 'httparty', group: :development

#:test group
group :test do 
  
 gem 'colored2'   
    
end

#:test + :development
group :test, :development do
gem 'xcodeproj'
end

#:cucumber + :test 
gem 'rest-client',group: [:cucumber, :test]

2.bundle install

main.rb

require 'dotenv'
require 'httparty'
require 'colored2'
require 'xcodeproj'
require 'rest-client'

bundle exec ruby main.rb

bundle exec ruby main.rb

结论: 所有gourp中 gem 'xxx' 的依赖都能找到

3.bundle install --without

#排除指定test、development group下gem的安装 
bundle install --without test development

该命令后续版本可能会废弃,下面命令可以代替
bundle config set without 'test development'
bundle install

最终会在根目录下生成.bundle/config配置文件

---
BUNDLE_WITHOUT: "test:development"

取消以排除的group,需要手动删除.bundle/config 文件夹

rm -rf .bundle/config

4.bundle config

#设置忽略的group依赖
bundle config set without 'test development'

#取消设置忽略的group依赖
bundle config unset without

bundle install

bundle.require

取消每个文件重复导入文件名

require 'rubygems'
require 'bundler'
Bundler.require(:default,:development,:test)

Dotenv.load

project_path = '/Users/yutangzhao/Movies/PadZone/PadZone.xcodeproj'
project = Xcodeproj::Project.open(project_path)
project.targets.each do |target|
puts target.name
end 

brew

brew 是MacOS上的软件包管理工具

安装

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Carthage

Carthage安装

//安装 carthage
 brew install carthage
 
//查看版本
carthage version 

//卸载 carthage
brew uninstall carthage

//执行cartfile
Carthage update --platform iOS

Cocoapods

是Gem下面的一个pod库,用来管理iOS的三方源码

cocoapods安装

后面更新

语法

//单行注释
#
//换行
put "tangge" //自动换行
print "tangge" //不会自动换行

//使用字符串
tangge = 'sddd'
puts "hanghang#{tangge}" //双引号可以使用变量 单引号不会起作用

//反引号
puts `ruby --version`

ruby报错

require: cannot load such file --xxx(LoadError)
  • ruby环境下没有这个库
  • ruby对应的gemset目录下 无法找到xxx.rb文件