BLOG main image
분류 전체보기 (239)
Rails (65)
Ruby (34)
이야기 (40)
스토리큐 (61)
그 밖에.. (30)
C# (6)
드리밍 인 코드
The note of Legendre
작은아이의 생각
agiletalk's me2DAY
[rails] Growl4Rails
美소년 ㅇㅅㅇ씨의 一日
마사키군의 생각
ayukawa's me2DAY
작은아이의 생각
agiletalk's me2DAY
63,405 Visitors up to today!
Today 10 hit, Yesterday 22 hit

 SUBSCRIBE

'newgem'에 해당되는 글 2건
2009/06/16 21:40

Gem은 ruby의 가장 멋진 기능 중 하나이다. 구현하고자 하는 기능이 있다면 우선 gem에 있는지 확인해 보라. 많은 것들이 누군가에 의해 이미 구현되어 있을 것이다. 원하는 것을 찾지 못한다 할지라도 이런 저런 gem들을 둘러보다 보면 좋은 생각을 얻을 수 있을 것이다. 그러다가 자신만의 생각을 구현했으면 gem으로 배포해서 다른 사람들과 공유할 수 있다. 이 글에서는 gem을 만드는 과정에 대해서 설명한다.

jeweler

jeweler는 gem 만들기를 도와주는 rubygem이다. jeweler를 이용하면 gem 의 골격을 손쉽게 만들 수 있으며, github 혹은 rubyforge로 배포도 쉽게 할 수 있다.

  1. gem install jeweler

jewler를 사용하기 전에 github config 설정을 해 주어야 한다.

  1. git config --global github.user username
  2. git config --global github.token token
새로운 gem 을 만들어 보자.
  1. jeweler GEM_NAME

git에 add할 수 없다고, 에러가 발생하는데, 왜 그런지 모르겠다.

그러면 다음과 같은 식의 gem의 파일 구조가 생긴다.(똑같지는 않다.)

  • lib : gem의 소스코드 디렉토리
  • test 혹은 spec : 테스트 코드가 있는 디렉토리
  • bin : 실행 파일이 있는 디렉토리
  • README.rdoc : gem 설명, 사용방법
  • LICENCE : 라이센스
  • Rakefile
  • .gitignore : commit할 때 무시할 파일들
  • VERSION : gem의 버전(major.minor.patch), rake task를 이용해서 관리할 수 있다.
  • gem_name.gemspec :  gem을 만들기 위한 설정 파일. rake gemspec을 통해서 만들 수 있다.
VERSION 및 gemspec 생성
  1. rake version:write
  2. rake gemspec

rake version:write 는 version을 0.0.0으로 초기화시킨다.
version을 하나 올리고 싶으면 다음과 같은 식으로 할 수 있다.

  1. rake version:bump:minor
  2. rake gemspec

version을 올린 후에는 rake gemspec을 실행해서 gemspec을 다시 만들어 주자.

gemspec 파일을 직접 수정할 일이 없다. 그 대신 gemspec에 추가하고 싶은 것들은 Rakefile에 추가를 한다. 그리고 gemspec의 변경사항이 생기면 rake gemspec을 실행하면 된다. gemspec 에 포함되는 것들 몇 가지를 살펴보면,

gem.files : gem에 포함되는 파일들

  1. gem.files.include FileList.new('lib/**/*.rb', "bin/*",
          "LICENCE", "VERSION", "README.rdoc", "Rakefile")

gem.add_dependency : 이 gem이 의존하고 있는 gem들

gem.executables : 실행파일

  1. gem.executables = ["filename"]

filenam은 bin 디렉토리에 위치한다. 이 곳에 적어준 파일은 gem을 설치할 때 ruby\bin 에 옮겨져서 실행할 수 있게 된다.

Gemspec에 대한  자세한 내용은 Gemspec Reference를 참조.

gem 빌드 및 설치

gem의 빌드는 build task를 이용할 수 있다.

  1. rake build

혹은 직접 gem 명령을 이용해도 된다.

  1. gem build gem_name.gemspec

빌드가 잘 되면 gem_name-version.gem 파일이 생성된다. zip 압축 파일이다.

gem의 설치는 다음과 같이 할 수 있다.

  1. gem install gem_name-version.gem

rake install 명령은 sudo를 사용하기 때문에 windows에서 에러를 발생시킨다.

gem의 배포

jeweler의 git관련 명령어들은 에러를 발생시킨다. 그래서 rake release라는 편리해 보이는 task가 있기는 하지만, 사용할 수가 없다.

그래서 그냥 git 명령어들을 입력해서 배포를 한다.

  1. git add *
    git commit –m “initial commit”                 
    git remote add origin git@github.com:xxx         # 원격지 repository인 github를 origin으로 등록(한번만 하면 된다)
    git push origin master                                     # origin에 변경내용 밀어넣기

windows에서 github를 사용하는 방법에 대해서는 github를 통해 gem 배포하기 를 참조.

코드의 수정이 생겨서 version을 하나 올리고 싶으면 다음과 같은 일을 하게 된다.

  1. rake version:bump:patch  # VERSION을 증가
  2. rake gemspec                 # gemspec을 다시 만든다.
  3. rake build                       # 빌드를 한다. test도 필요.
  4. git add .                        # git에 추가
  5. git commit -m 'rake'        # git에 commit
  6. git push origin master      # github에 밀어 넣는다.
2008/01/27 03:00

Overview

picnic 은Camping Application을 배포 및 관리하기 위한 툴이다. Picnic을 통해 Camping Application의 linux에서 설치및 실행을 원활히 할 수 있고, gem으로 packaging을 용이하게 해 준다.

Picnic은 다음 두 가지 가정을 전제한다.

  • Picnic으로 관리하고자 하는 것은 Camping Application이다.
  • 배포하려는 환경은 linux다.

 

설치

gem을 통해 설치할 수 있다.

  1. gem install picnic
    gem install newgem

newgem은 ruby application의 뼈대(skeleton)를 생성해 주는 gem이다.

 

Application의 생성

newgem을 이용해 application을 생성하자.

  1. newgem admin

admin이라는 application을 생성했다.

 

Picnic code 추가

admin/lib/admin.rb를 열어서 다음을 추가한다.

  1. $: << File.dirname(File.expand_path(__FILE__))

    require 'rubygems'
    require 'picnic'

    Camping.goes :Blog
    Blog.picnic!

    # Camping code를 여기에 넣는다.

    Blog.start_picnic

 

Camping code 구현

admin/lib/admin.rb에 camping code를 추가한다.

picnic에서는 기본적으로 "camping"과 "camping/session"을 require 하고 있다. 그래서 admin/lib/admin.rb에 이것들을 require할 필요는 없다.

mysql 사용하기 위해서 추가된 code들 역시 picnic이 처리해 주니 삭제하자. 그 대신 picnic이 알아들을 수 있도록 configuration 설정을 하자.

 

Configuration

picnic은 실행하면서 /etc/admin/config.yml 를 참조해 application을 구동한다. 만약 /etc/admin/config.yml 이 존재하지 않는 경우 root directory에 있는 config.example.yml를 etc/admin/config.yml 에 복사한다. 그러니 config.example.yml를 만들어 admin 의 root에 두자.

윈도우에서도 /etc/... 및에 파일을 생성하며 잘 동작한다.

  1. ### mongrel example
    server: mongrel
    port: 8800

    ##### DATABASE ########################################################################
    database:
      adapter: mysql
      database: admin
      username: root
      password:
      host: localhost
      encoding: utf8

    ##### Application Config #########################################################################
    server_name: admin
  2.  

    ##### LOGGING #########################################################################
    log:
      file: admin.log
      level: DEBUG
    #  file: /var/log/blog.log
    #  level: INFO

이 설정에는 HTTP server, database, log에 대한 설정은 물론 application의 설정도 포함될 수 있으며, Application에서는 다음과 같이 이 설정을 불러올 수 있다.

  1. name = Admin::Conf[:server_name]

 

admin/bin/ 에 실행파일 만들기

admin/bin/admin 을 다음과 같이 만든다.(실행파일로 만든다.)

  1. #!/usr/bin/env ruby

    require 'rubygems'
    require 'picnic/cli'

    cli = Picnic::Cli.new(
      'admin',
      :app_path => File.expand_path(File.dirname(File.expand_path(__FILE__)))
    )

    cli.handle_cli_input

이제 root에서 bin/admin으로 camping application을 실행시킬 수 있다.

 

만약 실행이 안된다면... filetype 을 정해주어야 해. svn에서 자동으로 변환하는 방법이 있다고 하던데..

http://blog.superkdk.com/46

 

path 설정

  1. PATH = $PATH:[ADMIN_ROOT]/bin

 

linux에서 대몬로 실행시키기

admin/bin/admin-ctl 을 다음과 같이 만든다.(실행파일로 만든다.)

  1. #!/usr/bin/env ruby

    require 'rubygems'
    require 'picnic/service_control'

    ctl = Picnic::ServiceControl.new('admin')

    ctl.handle_cli_input

 

실행

  1. admin-ctl start

중지

  1. admin-ctl stop

 

꼭 admin/bin 이 PATH에 포함되어 있어야 한다.

/etc/admin 에 쓸 권한이 없다고 하면 쓸 권한을 생성해 준다. root 권한으로 실행시키던지..

 

참조

http://code.google.com/p/camping-picnic/wiki/PicnicTutorial

이 글은 스프링노트에서 작성되었습니다.

'Ruby > Camping' 카테고리의 다른 글

[Camping] View 에 대한 tip  (0) 2008/01/27
[Camping] static 파일의 전송  (0) 2008/01/27
[Camping] picnic 사용  (0) 2008/01/27
[Camping] mysql 사용하기  (0) 2008/01/27
Camping 사용하기  (0) 2008/01/27
[Camping] session의 사용  (0) 2008/01/27
prev"" #1 next