Ruby 환경 구축 3

소개



지난번은 Ruby, rubygems, Gem에 대해 정리했다. 이번에는 bundler를 사용하는 경우에 대해 정리한다.

개요



bundler는 gem을 관리해주는 gem이다. 구체적으로는, gem 인스톨시에 의존관계가 있는 gem을 아울러 인스톨해 준다. 또한 응용 프로그램 단위로 gem을 설치할 수 있습니다.

디렉토리 구성 및 설치



디렉토리 구조



전회 기재한 Ruby와 rubygems에 대해서는 변하지 않으므로 생략. 이번에는/home/ec2-user하중을 대상으로 한다.


설치



  • ruby와 rubygems 설치 (이전과 유사)

    먼저 yum install ruby로 ruby와 rubygems를 설치하십시오.

  • bundler 설치(녹색)

    이것도 전회와 같다고 하면 같다. rubygems를 사용하여 bundler(gem)를 설치합니다. 게다가, 이번에 bundler 같이 명령이 있는 gem는/home/ec2-user/하하의 bin에 둔다.
  • 앱 디렉토리 만들기 (하늘색)
    먼저 앱 디렉토리 RubyAPP1을 만듭니다. 또한 vendor/bandle 디렉토리를 작성한다. 이 디렉토리는 응용 프로그램 용 gem을 설치하는 곳입니다. (엄밀하게는 뭐든지 좋지만, 일반적으로는 vendor/bandle로 하는 것 같다.)

  • GemFile 만들기
    이 파일은 응용 프로그램에서 사용하는 Gem을 설명합니다. 내용은 매우 간단하다. 이번에는 activesupport라는 gem을 설치한다.
    # gemのインストール元
    source "https://rubygems.org"
    git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
    # 利用するgem一覧
    gem "activesupport"
    

    source "htps : / / 루 바이 게 ms. 오 rg"는 gem의 다운로드 소스를 의미합니다. 그리고 git도 다운로드 소스로 정의됩니다.

  • gem 설치bundle install --path vendor/bundle 명령은 목록에 나열된 gem을 설치합니다. 설치처는 --path로 지정한 디렉토리이다. 이때 의존관계가 있는 gem도 마음대로 설치해 준다. 설치되면 Gemfile.lock이 생성됩니다. 이것은 설치된 gem 목록입니다.
    GEM
    remote: https://rubygems.org/
    specs:
        activesupport (4.2.11)
          i18n (~> 0.7)
          minitest (~> 5.1)
          thread_safe (~> 0.3, >= 0.3.4)
          tzinfo (~> 1.1)
        concurrent-ruby (1.1.4)
        i18n (0.9.5)
          concurrent-ruby (~> 1.0)
        minitest (5.11.3)
        thread_safe (0.3.6)
        tzinfo (1.2.5)
          thread_safe (~> 0.1)
    PLATFORMS
    ruby
    DEPENDENCIES
    activesupport
    BUNDLED WITH
    1.17.3
    

    과연, 의존관계와 실제로 들어간 것이 잘 안다.


  • 프로그램 작성 및 실행
    이 작업이 끝나면 프로그램을 만들고 실행합니다. 프로그램의 내용은 다음과 같다.
    # Rubygemsを使用することを明示
    require 'bundler'
    Bundler.setup
    # ActiveSupportを使用することを明示
    require 'active_support'
    # ActiveSupportに含まれる時間系の拡張機能(ライブラリ)を使用することを明示
    require 'active_support/time'
    # 現在時刻
    p Time.now
    # 1時間前(60秒*60分)の時刻
    p 1.hours.ago
    
    require 'bundler'Bundler.setup에서 bundler gem을 사용한다고 선언한다. 게다가 실제 gem을 require한다.

  • 포인트



    bundler는 애플리케이션 단위에 설치됩니다.



    각 디렉토리에서 bundle list를 실행하면 다음과 같습니다.
  • RubyAPP1의 경우
  • [ec2-user@ip-10-0-1-142 RubyAPP1]$ bundle list
    Gems included by the bundle:
    - activesupport (4.2.11)
    - bundler (1.17.3)
    - concurrent-ruby (1.1.4)
    - i18n (0.9.5)
    - minitest (5.11.3)
    - thread_safe (0.3.6)
    - tzinfo (1.2.5)
    

  • RubyAPP2의 경우
    [ec2-user@ip-10-0-1-142 RubyAPP2]$ bundle list
    Gems included by the bundle:
    - bundler (1.17.3)
    - string-to-bool (0.0.1)
    

  • 설치 대상은 한 번 지정하면 기억됩니다.



    한 번 bundole install을 실행하면 .bundle/config에 gem의 설치처가 기재된다. 이렇게하면 다음 번부터 디렉토리를 지정하지 않고 동일한 위치에 gem이 설치됩니다.
    BUNDLE_PATH: "vendor/bundle"
    

    설치 대상을 지정하지 않으면 bundler와 같은 위치에 설치됩니다.



    첫 번째 bundle install에서 경로를 지정하는 것을 잊은 경우/home/ec2-user/.gem/ruby/gems에 설치됩니다. 그리고 .bundle/config는 생성되지 않습니다.gem list 명령을 우울하고 bundler와 설치된 gem을 표시합니다.
    [ec2-user@ip-10-0-1-142 RubyAPP3]$ bundle list
    Gems included by the bundle:
    - bundler (1.17.3)
    - string-is_int (0.0.1)
    

    rubygems에서 gem을 넣은 것처럼 취급에 가깝습니다.

    요약



    bundler가 있으면, 어플리케이션마다 gem을 관리해 주고, 의존관계도 관리해 준다. 기본적으로 rubygems로 bundler를 넣은 후에는 bundler로 gem을 설치하는 것이 알기 쉽다. gem을 사용하지 않는 루비 애플리케이션은 만들 생각이 없기 때문에 루비와 bundler는 세트로 넣을 수 있습니다.

    좋은 웹페이지 즐겨찾기