BLOG main image
분류 전체보기 (239)
Rails (65)
Ruby (34)
이야기 (40)
스토리큐 (61)
그 밖에.. (30)
C# (6)
작은아이의 생각
agiletalk's me2DAY
[rails] Growl4Rails
美소년 ㅇㅅㅇ씨의 一日
마사키군의 생각
ayukawa's me2DAY
작은아이의 생각
agiletalk's me2DAY
[Google App Engine] 나의 첫번..
머드초보의 블로그
54,077 Visitors up to today!
Today 1 hit, Yesterday 42 hit

 SUBSCRIBE

'Gem'에 해당되는 글 5건
2009/06/16 21:43

Octocat작년 github가 발표된 후부터 github는 ruby 개발자들에게 큰 인기를 얻고 있다. rails를 비롯한 많은 gem들이 repository를 github로 옮겼다. 이 글에서는 windows환경에서 github를 통해 gem을 배포하는 과정에 대해 알아본다.

msysgit 설치하기

윈도우즈에서 git을 사용하기 위해서는 msysgit이 필요하다. msysgit에서 Git-xxx 를 다운받아 설치한다.

설치 도중 물어 보는 것들 중 신경 써야 하는 것들 몇 가지는,

  • Add "Git Bash Here" 를 체크한다. 이는 탐색기에서 마우스 오른쪽 버튼으로 보여지는 메뉴에 Git Bash Here 를 추가한다.
  • Use Git Bash only 선택한다. PATH를 건드리지 않기 때문에 충돌의 염려가 없다. 그 대신 git을 이용하기 위해서는 Git Bash Here를 이용해야 한다.
  • 그리고, Use OpenSSH를 선택한다.
기본 설정

적당한 디렉토리(예를들면 C:\gitroot)를 선택해서 git bash 를 연다. 그리고 이름과 이메일을 설정한다.

  1. $ git config --global user.name "Your Name Comes Here"
    $ git config --global user.email you@yourdomain.example.com
SSH Key를 생성하기

github는 rsa를 이용해서 사용자를 인증한다. 공개키를 github에 등록해 놓고 개인키로 인증을 수행을 한다. 따라서 github를 사용하기 위해서는 rsa 키가 필요하다. 이 rsa 키를 만드는 과정은 다음과 같다.

환경 변수에 $HOME을 설정해 준다.
git bash를 연다. 그리고 다음 명령을 입력해 rsa key를 생성한다.

  1. ssh-keygen -C "username@email.com" -t rsa

Enter file in which to save the key 에는 생성된 rsa key가 저장될 파일 이름을 적어준다. 그냥 엔터를 치면 $HOME/.ssh/id_rsa 이다.

Enter passphrase 에는 사용할 암호 문구를 적는다. 보안에 대한 걱정이 없다면 안 적어도 된다. 적지 말자.

생성이 잘 완료되었다면 #HOME/.ssh 디렉토리에 키가 들어있음을 확인할 수 있다. 여기에 id_rsa.pub 라는 파일이 있는데, 이것이 공개키다. github 프로젝트에 넣어야 하니 기억하자.

더 자세한 설명은 providing your SSH keys 참조.

github에 프로젝트 만들기

github에 로그인을 하고, 프로젝트 만들자. 그리고 프로젝트의 edit을 눌러서 rubygem에 체크를 해 두자.

edit 페이지에는 또한 Deploy Keys라는 것도 보인다. 여기에 생성한 공개키(id_rsa.pub)의 내용을 복사해서 넣고, update를 누른다. 키는 여러 개를 등록할 수 있다.

프로젝트 생성해서 github에 밀어넣기

우선 개인키를 등록하는 과정이 필요하다. 이 개인키로 인증을 거쳐야 github에 push를 할 수 있다. git bash를 열고 다음 명령을 실행하자.

  1. exec ssh-agent bash
  2. ssh-add /PATH/TO/id_rsa (생성한 개인키)

매번 ssh-agent를 실행하는 것이 번거롭다면 C:\Program Files\Git\etc\profile 에 exec ssh-agent bash 를 추가해도 된다.

생성한 프로젝트에 들어가보면 친절하게도 로컬에서 프로젝트를 생성해서 git에 첫번째 push를 할때까지 일련의 명령들이 나와 있다. 이를 참조해서 github에 만든 gem을 밀어넣어 보자.

  1. cd gem_directory
  2. git init
  3. git add *
  4. git commit –m “initial commit”                 
  5. git remote add origin git@github.com:xxx # 원격지 repository인 github를 origin으로 등록
  6. git push origin master                             # origin에 변경내용 밀어넣기

제대로 되었다면 github 프로젝트에 밀어 넣은 파일들을 볼 수 있다.

git 에 대해 조금 더 알고 싶다면 git 명령어 혹은 git tutorial 혹은 Git User's Manual 이 도움이 될 것이다.

rubygem 을 github를 통해서 배포하기

github 프로젝트의 rubygem이 체크되어 있어야 한다. 그 외에는 해줄 것이 없다. 이 체크만 되어 있다면 github는 gemspec 의 내용을 참조해서 gem을 만든다. gemspec의 version이 변경되면 github는 gem을 다시 만든다. 이 경우 version이 변경됬음을 github가 감지하는 시간이 꽤 걸리는 듯 하다. 대략 한두 시간 정도.

충분히 기다린 후 gem을 찾아 보면 등록한 gem이 보인다.

  1. gem search gem_name -r
프로젝트를 Github에서 다운받기

clone을 이용한다.

  1. git clone GIT_CLONE_URL

GIT_CLONE_URL은 public url이 아닌 your clone url 로 하자. 그래야 push가 된다.

참조

github rubygems

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에 밀어 넣는다.
2009/06/16 10:56

Mechanize gem은 웹사이트로 요청을 보내고, 받은 페이지의 링크를 따라가고, 폼을 제출하는 동작을 간편하게 준다. Mechanize는 Cookie를 저장하고, redirect를 따라가며, 방문한 사이트 목록(history)을 가지고 있다. 웹사이트와 상호작용하는 클라이언트를 만들고 싶은 경우 mechanize는 좋은 선택이 될 것이다.

간단한 사용법은 다음과 같다.

  1. require 'rubygems'
  2. require 'mechanize'
  3. WWW::Mechanize.new do |agent|
      agent.user_agent_alias = 'Windows IE 7'
      page = agent.get("http://www.google.com")
      page = page.form_with(:name => 'f') do |form|
        form.q = "cat"
      end.submit
      page.search("a.l").each do |ele|
        p ele.content
      end
    end

Mechanize의 GuildeExampe 페이지를 읽어 보면 더 좋은 이해를 할 수 있다.

조금 더 자세히 알아보자.

페이지 가져오기
  1. page = agent.get(“http://www.site.com”)

혹은 header와 referer 같은 것들을 설정하고 싶다면,

  1. page = agent.get({:url => url, :params => params, :referer => referer, :headers => headers})

가져온 페이지의 content_type이 html일 경우에 page는 WWW::Mechanize::Page 객체이다. 이 Page 객체는 기본으로 nokogiri parser를 사용한다. 그래서 다음과 같이 css로 element를 선택할 수 있다.

  1. page.search(“#element_id”)

다른 parser를 사용하고 싶다면

  1. WWW::Mechanize.html_parser = Hpricot
form 제출하기

페이지의 모든 form은 다음과 같이 확인할 수 있다.

  1. page.forms

form의 제출은 다음과 같다.

  1. page.form_with(:name => “login”) do |form|
  2.   form.action = “http://www.site.com/login”
  3.   form.login = “id”
  4.   form.passwd = “pass”
  5. end.submit
link, frame 따라가기

page의 link 목록은 다음과 같이 따라갈 수 있다.

  1. page.link_with(:text => “follow”).click

iframe이 사용되고 있는 경우 다음과 같이 iframe을 열 수 있다.

  1. page = page.iframes.first.click
파일의 저장

이미지 파일을 저장하고 싶으면

  1. file = agent.get("http://www.site.com/image/1.JPG")
    page.save_as("image.jpg")

마지막으로 구글에서 이미지 검색을 한 후 이미지들을 저장하는 코드는 다음과 같다.

  1. WWW::Mechanize.new do |agent|
      agent.user_agent_alias = 'Windows IE 7'
      page = agent.get("http://images.google.co.kr/imghp")
      page = page.form_with('f') do |form|
        form.q = 'cat'
      end.submit
      page.links.each do |l|
        next unless l.href =~ /imgurl=(.+?&)/
        url = $1.chop
        agent.get(url).save_as(File.basename(url))
      end
    end

'Ruby' 카테고리의 다른 글

[Ruby] Gem 만들기  (0) 2009/06/16
[ruby] sms_client gem  (0) 2009/06/16
[Ruby] mechanize gem을 이용해 웹사이트와 통신하기  (0) 2009/06/16
[ruby] RDOC 을 위한 주석 달기  (0) 2009/02/23
[Ruby] block expressions, 그리고 code block  (0) 2008/08/12
[Ruby] or 와 || 의 차이  (0) 2008/08/12
2008/07/05 21:18

storyq_client 는 storyq의 open api를 쉽게 사용하기 위한 ruby gem입니다. github에 올려져 있습니다.

스토리큐는 Open API의 인증을 OAuth를 통해서 하고 있습니다. OAuth 인증하기 가 도움이 될 것입니다.

springnote_client를 많이 따라했습니다.^^

 

설치

  1. sudo gem install aproxacs-storyq_client

 

사용하기

우선 스토리큐에 접속해서 매시업 애플리케이션을 등록합니다. 그러면 Consumer Token과 Consumer Secret을 얻을 수 있습니다.

 

storyq 초기화 - acess_token 얻기

사용자의 Access Token이 없는 경우 다음과 같은 과정을 통해 Access Token을 얻을 수 있습니다.

  1. require "rubygems"
  2. require "storyq_client"
  3. storyq = StoryQ( 
  4.   :consumer_token => "CONSUMER_TOKEN",
      :consumer_secret => "CONSUMER_SECRET")
  5. request_token = storyq.consumer.get_request_token
  6. # 사용자를 request_token.authorize_url로 redirect 시켜서 인증을 거치도록 한 후
  7.  
  8. storyq.access_token = request_token.get_access_token
  9. # save storyq.access_key, storyq.access_secret

 

사용자의 Access Token을 알고 있는 경우에는 다음과 같이 초기화할 수 있습니다.

  1. storyq = Storyq(
      :consumer_token => "CONSUMER_TOKEN",
      :consumer_secret => "CONSUMER_SECRET",
      :access_key => "ACCESS_TOKEN",
      :access_secret => "ACCESS_SECRET")

 

큐의 목록를 가져오기

파라미터들에 대해서는 스토리큐 Open API 를 참조하세요.

  1. boxes = storyq.boxes.find :all        # returns 20 recent boxes
    boxes = storyq.boxes.find :all, :page => 2 # returns 21-40 boxes
    boxes = storyq.slide_boxes.find :all     # returns 20 recent slide boxes
    boxes = storyq.photo_boxes.find :all     # returns 20 recent photo boxes

 

내가 업로드한 큐의 목록 가져오기
  1. boxes = storyq.boxes.find :mine    
    boxes = storyq.slide_boxes.find :mine

 

큐를 하나 가져오기

큐의 내용에 대해서는 큐의 xml 을 참조하세요.

  1. box = storyq.boxes.find 1234    # returns a box whose id is 1234
    puts box.title
  2. puts box.flash_tag

 

큐의 내용을 수정하기
  1. box.title = "my world"
    box.tags = "some, tags"
    box.save

 

큐를 삭제하기
  1. box.destory

 

슬라이드 큐를 생성하기

filename 과 title은 필수입니다.

  1. storyq.slide_boxes.create(
        "filename" => "A_FILE.ppt",
        "title" => "TITLE",
        "description" => "DESCRIPTION",
        "tags" => "SOME, TAGS",
        "category" => "여행",
        "permission" => "public")

 

포토큐를 생성하기

title은 필수입니다.

  1. pbox = storyq.photo_boxes.create(
        "title" => "TITLE",
        "description" => "DESCRIPTION",
        "tags" => "SOME, TAGS",
        "category" => "여행",
        "permission" => "public")

 

포토큐에 사진을 추가하기
  1. photo = pbox.add_photo(
            "filename" => "A_IMAGE.jpg",
            "title" => "TITLE",
            "note" => "SOME NOTES FOR THE PICTURE")

 

포토큐의 사진 목록 가져오기
  1. photos = pbox.photos

 

사진을 수정하기
  1. photo.title = "NEW TITLE"
    photo.note = "NEW NOTE"
    photo.save

 

사진을 삭제하기

사진이 포토큐에서 삭제됩니다.

  1. photo.destory

 

의존 관계
  • active_support >= 2.0.2
  • oauth >= 0.2.4



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

'스토리큐' 카테고리의 다른 글

최우 운우도화첩  (0) 2008/07/31
효율적으로 일하는 방법  (0) 2008/07/30
스토리큐의 Open API를 위한 storyq_client gem  (0) 2008/07/05
로스앤젤리스  (0) 2008/07/03
동물 모양 헤어 스타일  (0) 2008/06/16
세계의 야경  (0) 2008/05/30
2008/04/20 13:59



hpricot soup morph pottery



출처 : 스토리큐

'Ruby' 카테고리의 다른 글

[Ryuby] tmail을 이용해서 메일보내기  (0) 2008/05/07
[Ruby] String을 Time으로 변환하기  (0) 2008/05/07
ruby gem 소개  (0) 2008/04/20
RUSH  (0) 2008/04/19
ruby로 sudoku 문제 풀어보기  (0) 2008/03/31
Guiding Principles of merb development  (0) 2008/03/29
prev"" #1 next