12/08/2018, 13:47

Tìm hiểu về Gemfile

Nếu bạn là một Ruby on Rails developer thì chắc chắn không xa lạ gì Gemfile. Gemfile là một tiện ích của gem Bundler được sử dụng để quản lý các gem được sử dụng trong application của bạn. Gemfile chứa mã ruby và tùy thuộc vào bối cảnh ta có các phương thức để mô tả các gem được yêu cầu. Global ...

Nếu bạn là một Ruby on Rails developer thì chắc chắn không xa lạ gì Gemfile. Gemfile là một tiện ích của gem Bundler được sử dụng để quản lý các gem được sử dụng trong application của bạn. Gemfile chứa mã ruby và tùy thuộc vào bối cảnh ta có các phương thức để mô tả các gem được yêu cầu.

Global Source

Ở trên cùng của Gemfile, một dòng được thêm vào để chỉ định nguồn Rubygems nơi chứa các gem được liệt kê trong Gemfile.

source "https://rubygems.org"

Bạn có thể liệt kê nhiều global source nhưng các nguồn này phải là một nguồn Rubygems hợp lệ.

Nguồn sẽ được kiểm tra dựa trên được ưu tiên, nếu một gem được tìm ra ở trên nhiều hơn 1 nguồn thì Bundler sẽ in một cảnh báo khi cài đặt rằng nguồn nào đã được sử dụng và liệt kê các nguồn khác, nơi gem có sắn. Đôi khi, bạn muốn cài một gem mà nguồn của nó không đúng tiêu chuẩn, để bỏ qua cảnh báo này các bạn có thể sử dụng :source option hoặc một source block.

  • Thông tin đăng nhập (Credentials)

    Một số nguồn gem yêu cầu thông tin đăng nhập, Sử dụng lệnh bundle config để set username và password cho các nguồn cần thế. Nhưng nếu vậy các lệnh phải được chạy một lần trên mỗi máy tính sẽ cài đặt các Gemfile. Bạn có thể credentials để lưu trữ các chứng từ ngay trong Gemfile. Sử dụng command:

    bundle config gems.example.com user:password
Đối với một số nguồn như một công ty tài khoản Gemfury, nó có thể đơn giản hơn như là thông tin trong Gemfile như một phần của URL nguồn.
	source "https://user:password@gems.example.com"
Thông tin trong URL source sẽ được ưu tiên hơn thông tin được sử dụng trong config.

Ruby

Nếu ứng dụng của bạn yêu cầu 1 phiên bản Ruby hoặc engine cụ thể, xác định yêu cầu của bạn bằng các sử dụng method ruby, kèm theo rất nhiều tham số. Hầu hết các tham số là tùy chọn.

  • Version (Yêu cầu)

    Phiên bản Ruby mà ứng dụng của bạn yêu cầu. Đôi khi bạn muốn sử dụng một Ruby engine thay thế như JRuby hay Rubinius, đây sẽ là phiên bản Ruby mà phù hợp với engine.

    ruby "1.9.3"
  • Engine(:engine)

    Mội ứng dụng có thể chỉ định một Ruby engine, nếu engine được xác định, một phiên bản engine cunxg phải được xác định.

  • Engine Version (:engine_version)
    Ruby engine phải phù hợp với Ruby version

    ruby "1.8.7", :engine => "jruby", :engine_version => "1.6.7"
  • Patch (:pathchlevel)
    ruby "2.0.0", :patchlevel => "247"

Gem

Để chỉ định một gem được cài đặt bạn sử dung method gem với các tham số đi kèm, Hầu hết các tham số là tuỳ chọn cho đến khi có quy định khác.

  • Name (Bắt buộc)
    gem "nokogiri"
  • Version
    gem "rails", "3.0.0.beta3"
    gem "rack",  ">=1.0"
    gem "thin",  "~>1.1"
Hầu hết các phiên bản như là ">=1.0" là tự giải thích bản thân nó, chỉ có "~>" có ý nghĩ hơi khác một chút, ví dụ "~>2.0.3" tức là từ ">=2.0.3" đến "<2.1", "~>2.1" là từ ">=2.1" đến "3.0".
  • Require As (:require)

    Nếu tập tin chính của gem với tên gem, bạn cần sử dụng require để yêu cầu.

    gem 'rspec', :require => 'spec'
    gem 'sqlite3'
Chỉ định :require => false để ngăn chặn bundler từ gem nhưng vẫn cài đặt và duy trì sự phu thuộc.
    gem 'rspec', :require => false
    gem 'sqlite3'
Để yêu cầu require bạn cần gọi Bundler.require trong application của bạn.
  • Source

    Đôi khi bạn muốn cài đặt gem từ một nguồn riêng, bạn có thể sử dụng option source, khi đó nguồn mặc định sẽ bị ghi đè.

    gem 'my_gem', '1.0', :source => 'https://gems.example.com'
Nếu bạn có nhiều gem cùng sử dụng một nguồn riêng tư, bạn có thể sử dụng khối source để nhóm chúng lại.
    source 'https://gems.example.com' do
      gem 'my_gem', '1.0'
      gem 'another_gem', '1.2.1'
    end
  • Git

    Git repositories cũng là một nguồn gem khả dụng, miễn là repo đó chứa ít nhất một gem khả dụng. Tùy chọn git đi kèm với :tag, :branch hoặc :ref. Nếu không mặc định là nhánh master.

    gem 'nokogiri', :git => 'https://github.com/tenderlove/nokogiri.git', :branch => '1.4'
Nếu git repository không chứa file .gemspec, bundler sẽ tạo một file mà không cần bất cứ sự phụ thuộc, thực thi hay phần mở rộng C. Điểu này có thể làm việc với các gem đơn giản nhưng không làm việc với những cái khác. Nếu không có .gemspec có lẽ bạn không nên sử dụng gem từ git.
  • Path

    Nếu bạn muốn sử dụng gem trực tiếp từ hệ thống của mình, tùy chọn :path giúp bạn có thể làm được điều này.

    gem 'extracted_library', :path => './vendor/extracted_library'
Nếu bạn muốn sử dụng nhiểu gem local trực tiếp từ hệ thống, bạn có thê thiết lập global path đến thư mục của bạn và bundler sẽ tự động tải gemspec từ các thư mục con.
    path 'components' do
      gem 'admin_ui'
      gem 'public_ui'
    end
  • Group

    Chỉ định gem có thể được đặt vào các nhóm. Khi cài đặt có thể được bỏ qua (tùy chọn --without) hoặc cài tất cả một lần (sử dụng Bundler.require)

    gem 'wirble', :group => :development
    gem 'debugger', :group => [:development, :test]

    group :test do
      gem 'rspec'
    end

0