ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Programming Ruby (29) 루비 세팅하기 - gem
    Ruby 2016. 11. 21. 23:51



    루비가 라이브러리를 찾는 곳

    특정 라이브러리를 루비 프로그램에서 사용하기 위해 require와 load를 사용할 수 있다. 루비를 특정 머신에 맞추어 빌드하면, 라이브러리 코드가 저장되는 표준 디렉터리 목록을 미리 만들어둔다. 

    $  ruby -e 'puts $:'

    위의 명령을 통해 루비 라이브러리 디렉터리 경로를 알 수 있다.


    팀원 모두가 공유하는 라이브러리를 접근해야 하는 경우 선택방법이 두가지가 있다. 프로그램을 안전 수준 0에서 돌린다면 RUBYLIB 환경 변수 검색에 사용할 디렉터리를 하나 이상 추가할 수도 있다. 그리고 프로그램이 setuid를 사용하지 않는다면, 명령행 옵션 -I를 써도 같은 효과를 얻을 수 있다. 

    $: 변수는 불러올 파일을 검색하는 경로를 담은 배열이다. 이 변수는 초기값으로 기본 디렉터리 목록을 가지며, 여기에 RUBYLIB과 -I에서 지정해준 디렉터리가 더해진다. 그리고 프로그램 실행 중 언제든지 이 배열에 디렉터리를 추가할 수 있다. 



    루비젬 통합 

    루비젬은 루비 라이브러리와 애플리케이션의 표준화된 패키징과 설치를 지원하는 프레임워크다. 루비젬 세계에서 개발자는 자신의 애플리케이션과 라이브러리를 젬이라는 단일 파일에 묶어 넣는다. 젬 파일은 표준화된 포맷을 따르며 일반적으로 인터넷상의 저장소에 저장되어 있다.

    루비젬 시스템에서는 젬 파일을 조작하기 위한 gem이라는 적절한 이름의 명령행 도구를 지원한다. 또한 프로그램에서 라이브러리로 젬에 접근할 수 있도록 해 주는 기능도 루비에 내장되어 있다.

    로컬 머신에 설치된 젬 목록을 확인하기 위해 다음 명령어를 이별갛ㄴ다.

    $ gem list


    젬 문서 읽기
    문서를 찾는 가장 확실한 방법은 gem 명령어를 사용해 루비젬이 설치된 메인 디렉터리를 찾는 것이다.

    $ gem environment gemdir
    /usr/local/lib/ruby/gems/2.0.0

    젬을 설치하면서 생성된 문서들은 앞의 디렉터리의 doc/라는서브 디렉터리에 저장된다. 이 문서를 보는 가장 쉬운 방법은 루비젬에 포함된 gem server라는 유틸리티를 이용한다.

    $ gem server
    Server started at http://[::ffff.0.0.0.0]:8808
    Server started at http://0.0.0.0:8808

    gem server 명령어는 현재 사용 중인 컴퓨터에서 웹 서버를 실행한다. 8808 포트를 사용해 기본 디렉터리에 저장된 젬과 젬의 문서들을 확인할 수 있다.



    젬 사용하기 

    젬을 설치하고나면 require 구문을 통해 프로그램에서 사용할 수 있다.

    require 'builder'



    젬과 버전 

    젬 저장소에 존재하는 모든 버전을 확인해 보자.

    $ gem list --details --remote --all builder
    *** REMOTE GEMS ***
    builder (2.1.2, 2.1.1, 2.0.0, 1.2.4, 1.2.3, 1.2.2 ...)


    로컬에 설치된 젬 목록을 출력해보자.

    $ gem list builder




    레이크(Rake) 빌드 도구 

    짐 와이어리크는 Builder 젬뿐 아니라 레이크라는 유용한 유틸리티 프로그램도 만들었다. 레이크는 범용 빌드 도구로 사용되는 메이크(Make)의 루비 버전으로 구현되었다. 레이크는 범용적인 자동화 도구다. 레이크를 사용하면 프로젝트에서 실행되는 모든 태스크를 한 장소에서 관리하고 깔끔하게 정리할 수 있다.

    레이크를통해 임시 백업 파일들을 한꺼번에 삭제하는 프로그램을 만들 수 있다.

    require 'fileutils'
    files = Dir['*~']
    FileUtils::rm files, verbose: true

    FileUtils 모듈에는 파일과 디렉터리를 조작하는 다양한 메서드가 정의되어 있다. 위의 코드에서는 rm 메서드를 사용한다. 백업 파일을 찾는데 Dir 클래스를 사용하고 백업 파일들을 rm 메서드에 넘겨준다.

    이를 레이크를 통해 실행할 수 있는 테스크로 만들어 보자.

    기본적으로 Rake 명령어는 현재 디렉터리(또는 그 상위 디렉터리)의 Rakefile을 찾는다. Rakefile에는 레이크가 실행할 수 있는 태스크의 정의가 포함된다.

    다음 코드를 Rakefile로 저장해보자.

    desc "Remove files whose names end with a tilde"
    task :delete_unix_backups do
        files = Dir['*~']
        rm(files, verbose: true) unless files.empty?
    end

    이 파일에는 .rb 확장자가 붙이지 않지만 루비 코드 파일이다. 레이크는 desc와 task 등의 메서드를 포함한 환경을 정의하고 Rakefile을 실행한다. 

    desc 메서드는 이어지는 task를 설명하는 한 줄로 된 문서를 넘겨받는다. task 메서드는 Rake 명령어로 실행될 때 동작의 코드를 정의한다. 매개 변수는 태스크의 이름(시벌)이 되며 블록은 실행될 코드가 된다.
    위의 코든느 다음과 같이 실행할 수 있다.

    $ rake delete_unix_backups
    (in /Users/dave/BS2/titles/ruby4/Book/code/rake)
    rm entry~

    첫 번재 줄은 레이크가 Rake파일을 찾은 디렉터리를 의미한다. 다음 줄은  rm 메서드를 사용할 때의 출력이다. 여기서는 entry~ 파일 하나를 삭제한다는 것을 출력한다. Rakefile 에 두 번째 태스크를 만들어 보자. 이번에는 위도의 백업파일을 삭제한다.

    desc "Remove files with a .bak extensions"
    task :delete_windows_backups do
        files = Dir['*.bak']
        rm(files, verbose: true) unless files.empty?
    end

    윈도와 유닉스에서 모두 실행 가능할 때 현재 플랫폼에 대응하는 백업파일을 삭제하려면 어떻게 해야 할까. 두 가지 일을 모두 하는 태스크를 만들 수도 있지만 레이크는 태스크를 조합하는 방법을 제공한다.

    desc "Remove Unix and Windows backup files"
    task :delete_backups => [ :delte_unix_backups, :delete_windows_backups ] do
        put "All backups deleted"
    end

    새로운 태스크의 이름은 delete_backups가 되며 이는 앞서 정의한 두 태스크에 의존적인 태스크다. 

    $ rake delete_backups
    rm entry~
    rm index.bak list.bak
    All backups deleted


    현재 Rakefile에는 유닉스와 윈도의 삭제 태스크에 중복된 부분이 있다. 이는 단순히 루비 코드이므로 루비 메서드를 통해 단순화 할 수 있다.

    def delete(pattern)
        files = Dir[pattern]
        rm(files, verbose: true) unless files.empty?
    end

    desc "Remove files whose names end with a tilde"
    task :delete_unix_backups do
       delete "*~"
    end

    desc "Remove files with a .bak extensions"
    task :delete_windows_backups do
        delete "*.bak"
    end

    desc "Remove Unix and Windows backup files"
    task :delete_backups => [ :delte_unix_backups, :delete_windows_backups ] do
        put "All backups deleted"
    end

    Rake를 매개 변수 없이 호출하면 default라는 이름을 가진 태스크가 실행된다. 다음 명령어를 통해 Rakefile에 정의된 태스크들을 확인할 수 있다.

    $ rake -T
    (in /Users/dave//BS2/~/~)
    rake delete_backups        # Remove Unix and Windows backup files
    rake delete_unix_backups    # Remove files whose names end with a tilde
    rake delete_windows_backups     # Remove files with a .bak extension



    빌드 환경

    루비를 특정 아키텍처에 맞춰 빌드하면 빌드 시에 사용된 모든 설정이 rbconfig.rb 라이브러리 파일 내의 RbConfig 모듈에 출력된다. 루비 설치후 현재 프로그램이 컴파일된 방법을 확인할 수 있다.

    require 'rbconfig'
    include RbConfig
    CONFIG["host"] # => "x86_64-apple-darwin12.4.1"
    CONFIG["libdir"] # => "/Users/dave/.rmv/rubies/ruby-2.0.0p192/lib"

    확장 라이






















    끄읕


Designed by Tistory.