iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 4
2

身為菜味很重的女子,對文章也沒有特別規劃,目前狀態大概就是想到什麼就寫什麼了。昨日講到Gemsets,那今天就來看Gem與Bunder。


Gem

Ruby世界有很多的大神,提供了許多套件包及框架給大家使用,去滿足大家的需求或者解決某些特定問題,例如:Faker . Primary . Devise . Seed ...,最有名的大概就是我們現在所使用Rails框架吧!而這些打包好的套件的就稱為Gem。
更多Gems請參考RubyGem官網 https://rubygems.org/
RubyGem相關文件說明 https://guides.rubygems.org/

安裝bundler套件

$ gem install bundler
Successfully installed bundler-2.0.2
Parsing documentation for bundler-2.0.2
Done installing documentation for bundler after 2 seconds
1 gem installed

當我們利用RVM在安裝Ruby的時候就會內建Gem,Gem的預設位置會在.rvm/gems,那我們用Gem下載的套件,就會安裝在.rvm/gems/ruby-2.3.1 目前Ruby版本的位置。
可以用命令gem env來看,INSTALLATION DIRECTORY安裝目錄就是gem的位置

$ gem env

RubyGems Environment:
  - RUBYGEMS VERSION: 3.0.6
  - RUBY VERSION: 2.6.3 (2019-04-16 patchlevel 62) [x86_64-darwin18]
  - INSTALLATION DIRECTORY: /Users/min/.rvm/gems/ruby-2.6.3
  - USER INSTALLATION DIRECTORY: /Users/min/.gem/ruby/2.6.0
  - RUBY EXECUTABLE: /Users/min/.rvm/rubies/ruby-2.6.3/bin/ruby
  - GIT EXECUTABLE: /usr/local/bin/git
  - EXECUTABLE DIRECTORY: /Users/min/.rvm/gems/ruby-2.6.3/bin
  - SPEC CACHE DIRECTORY: /Users/min/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /Users/min/.rvm/rubies/ruby-2.6.3/etc
  - RUBYGEMS PLATFORMS:

… ( 略 )

移除套件uninstall

$ gem uninstall yarn
Remove executables:
	yarn

in addition to the gem? [Yn]  y
Removing yarn
Successfully uninstalled yarn-0.1.1

其他Gem命令

$ gem install rails -v 6.0.0    # 安裝指定版本
$ gem uninstall rails -v 6.0.0  # 移除指定版本

Bundler

Bundler是ruby的套件,使用gem可以下載(上文有示範)。Bundler是用來解決管理Gems相依性問題。簡單來說,因為同一個套件會有很多個版本,所以在使用上就會有套件多版本管理上的問題,而Bundler則是解決這個問題的套件。Bundler預設是連線http://rubygems.org
當命令$bundle install時會連至伺服器,並且根據目錄中Gemfile的設定自動下載及安裝Gem套件

命令bundle install(或是bundle)如果已安裝就會顯示Using

$ bundle
 …
Using simple_form 4.1.0
Using spring 2.1.0
 … ( 略 )

如果沒有,就會看到Fetching、Installing訊息出現

$ bundle
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
 …
Fetching sassc 2.2.1
Installing sassc 2.2.1 with native extensions
 … ( 略 

其他Bundler命令

$ bundle show      # 顯示所有的gem套件
$ bundle check     # 檢查前安裝的gem是否與Gemfile的gem版本相依
$ bundle update    # 更新系統中的套件,並且同時更新Gemfile.lock文件
$ bundle clean     # 清除目錄中未使用的gem

更多詳細內容請看Bundler https://bundler.io/v2.0/bundle_clean.html

參考連結
https://ihower.tw/rails/environments-and-bundler.html
http://sayaku.github.io/blog/2016/05/05/rubyde-rvm-gem-bundler/

作業系統 macOS Mojave10.14.6
Ruby 2.6.3
Rails 5.2.3


上一篇
Day 03 | RVM的Gemsets?
下一篇
Day05 | 變數與常數
系列文
從色彩繽紛到只看亂碼日子,學程式從 Ruby 出發!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Ho.Chun
iT邦新手 5 級 ‧ 2021-02-07 18:01:31

請問 bundlebundler 差別在於 ? /images/emoticon/emoticon06.gif

karasu iT邦新手 5 級 ‧ 2024-11-22 14:05:34 檢舉

bundler 是套件名稱,bundle 是拿來呼叫這個套件的指令

我要留言

立即登入留言