身為菜味很重的女子,對文章也沒有特別規劃,目前狀態大概就是想到什麼就寫什麼了。昨日講到Gemsets,那今天就來看Gem與Bunder。
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 install rails -v 6.0.0 # 安裝指定版本
$ gem uninstall rails -v 6.0.0 # 移除指定版本
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
… ( 略
$ 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
請問 bundle
和 bundler
差別在於 ?
bundler
是套件名稱,bundle
是拿來呼叫這個套件的指令