dd

if [ -f ~/.bash_login ]; then
  . ~/.bash_login
fi

if [ -f ~/.profile ]; then
  . ~/.profile
fi

export LANG="ko_KR.UTF-8"

alias "ls=ls -vFG"

export PATH="/opt/local/bin:/opt/local/sbin:$PATH"

PS1='\W> '

alias "l=ls -l"

alias "irb=irb --simple-prompt"

PATH="/Library/Frameworks/Python.framework/Versions/Current/bin:${PATH}"

export PATH

export EDITOR="$HOME/bin/mate -w"






set nocp
set all&
set hi=100
set bs=indent,eol,start
set fenc=utf-8
set fencs=utf-8,cp949,cp932,euc-jp,shift-jis,big5,latin1,ucs-2le
filetype on
set ru
set sc
set nu
set ts=4
set sw=4
set noet
set sts=0
"set nowrap
set hls
set nows
set ic
set scs
if has("gui_running")
    set lines=50
    set co=125
endif
set report=0
set ls=2
set background=dark
set cindent
colorscheme elflord
filet plugin indent on
syntax on
set ai
set si
iab xdate <C-R>=strftime("%Y-%m-%d %H:%M:%S")<CR>
iab xtime <C-R>=strftime("%H:%M:%S")<CR>
iab xname Ohyung
iab xcoding /*<CR>Project Name : <CR><CR>Version : 1.0<CR>Copyright (c) 2007 : Ohyung ( ohyung@ohyung.com )<CR>Last modified at : <C-R>=strftime("%Y.%m.%d")<CR><CR>*/<CR>
set wmnu
let g:explVertical=1
let g:explSplitRight=1
let g:explStartRight=1
let g:explWinSize=20
map <F2> V
map <F3> y
map <F4> p
map <F5> :w!<CR>:!gcc % -o %<.out<CR>
map <F6> :!./%<.out<CR>
map <F8> K
set lz
set lpl
set ffs=unix,dos,mac
map #4 :w<CR>:!javac "%"<CR>
map #5 :!java "%:r"<CR>

by redrails | 2007/12/03 06:04 | Mac | 트랙백 | 덧글(0)

ERP , CRM , SCM

ERP (Enterprise Resource Planning) 란를 간단히 나마 정의 한다면 기업의 생산, 물류, 회계, 인사등의 전체적인 기업활동을 지원해 주는 Integrated Package라고 말할 수 있을 것이다. 하지만 이것은 어디까지나 협소한 정의에 불과하다. 이러한 ERP라는 정의를 한글로 번역하자면 전사적 자원관리 시스템라고 말할 수 있을 것이다. 이 용어는 처음 Gartner Group이 처음 사용하면서 그 유래를 찾아 볼 수 있을 것이다. ERP를 간단히 나마 정의 한다면 기업의 생산, 물류, 회계, 인사등의 전체적인 기업활동을 지원해 주는Integrated Package라고 말할 수 있을 것이다. 하지만 이것은 어디까지나 협소한 정의에 불과하다. 이러한 ERP라는 정의를 한글로 번역하자면 전사적 자원관리 시스템라고 말한다.

CRM (Customer Relationship Management)
(고객관계관리)
기업의 현재 고객과 잠재고객을 이해하고 예상하는 것을 목표로 하는 사업전략이다. 기술적인 측면에서 CRM은 *기업 전반에 산재돼 있는 고객데이터의 추출 *기업 내부와 외부의 모든 고객관련 데이터를 중앙 데이터베이스로 흡수 *수집된 데이터를 분석하고 분석결과를 다양한 고객접점으로 배분 *이동판매, 콜센터, 웹사이트, 판매시점, 직접 마케팅 등의 고객 접점을 통한 정보 활용을 포함한다

SCM(Supply Chain Management) (공급망 관리)
제품 생산을 위한 프로세스를 전산화해 부품조달에서 생산계획, 납품, 재고관리 등을 효율적으로 처리할 수 있는 공급망 관리 솔루션을 뜻한다. SCM솔루션은 제품을 생산하는 기업이 부품의 구매, 생산, 판매까지의 모든 일정을 수립하고 고객의 수요계획 및 물류현황을 체계적으로 정리, 제품의 흐름을 원활하고 효율적으로 수행할 수 있도록 도와주는 역할을 한다. 비용과 시간을 절감을 통해 생산성 향상을 꾀할 수 있어 기간업무 시스템의 의사결정을 신속하게 할수 있다는 장점 때문에 최근 기업들의 도입이 활발하게 이뤄지고 있다.

by redrails | 2007/11/22 10:47 | 트랙백 | 덧글(0)

Tortoise SVN 으로 svn 접근하기

  • Google:TortoiseSVN 으로 구글링하여 Tortoise SVN 을 다운받습니다. 프리웨어입니다.
  • 설치 후 시스템을 재시작합니다. 윈도우즈에 딱 붙어 동작하는 방식의 프로그램이라 어쩔 수 없습니다.
  • 다음의 예제를 적절히 변형하여 사용하세요
  • 프로젝트 디렉토리 이름은 luu 입니다.
  • repository 는 서버의 /home/svn/luu

    입니다. 따라서 repository URLsvn+ssh://stania@upnl.org/home/svn/luu 입니다.

  • 새 폴더를 하나 만들고, 이름을 지정합니다.
  • 마우스 오른쪽 버튼을 누르면, SVN Checkout 이 보입니다. 클릭합니다.
  • URL of repository 항목에 위의 URL 을 써넣습니다.
  • 나머지 값은 적절하게 써넣습니다. ok 를 누릅니다. 패스워드를 수차례 입력할 수도 있으니 정확하게 계속 응해줍시다. (이 답답함에 대한 해결은 다음절에서…)
  • 그럼 수 차례 시도 후에 파일들을 받아옵니다. 성공! (실패할 경우 이 아래에 질문을 달아보세요)

원격지 서버에서 ssh 를 사용할 때 패스워드 입력 과정을 생략하기

  • 위의 과정을 따라했다면, 패스워드를 여러 번 연속 입력하는 삽질을 하게 되거나
  • 커밋이나 로그보기 등등의 작업에 계속 패스워드를 입력하는 짓을 해야 합니다.
  • 이를 해결해봅시다!

PuTTYgen 을 사용하는 방법

원격지 서버에서 SSH-keygen 을 사용하는 방법

  • 아래의 방법은 private key 가 네턱 위로 떠다닌다는 문제점이 존재합니다. 가능하면 사용하지 마세
  • MYKEY가 한번만 전송되기 때문에 충분히 안전할 것 같은데요? -Rica
  • 서버에 로그인합니다.
  • 다음을 수행합니다
  • ssh-keygen -b 1024 -t dsa -f MYKEY

자신의 key 를 보호할 passphrase 를 물어볼테지만, 앞으로의 귀차니즘을 덜기 위해서는 빈 문자열로 놔둡니다. 하지만 이 private key 는 확실히 보호되어야 합니다. 누군가가 복사해 가지 않게 주의하세요 :)

  • ls -l MYKEY*

    을 해보면, 두 개의 파일이 생성된 것을 알 수 있습니다. 다음을 수행해줍니다.

    cp MYKEY.pub ~/.ssh/authorized_key

그리고, MYKEY 파일을 자신의 컴퓨터로 다운로드합니다.

  • PuTTy 패밀리중의 하나인 http://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe PuttyGen 을 실행시킵니다.
  • Conversion - Import Key 를 선택하여 다운로드한 MYKEY 를 선택합니다.
  • 키가 읽힐겁니다. 그럼 그 키를 저장합니다. Save Private Key 를 선택. MYKEY.ppk 파일로 저장.
  • PuTTy 를 켭니다. 세션을 하나 만들어야 합니다.  MyConnection

    이라고 합시다. 다음과 같이 설정합니다. (한글버전인 경우 알아서 잘 바꿉시다)

  • Session→HostName: Hostname or IP Adress of your server
  • Session→Protocol: SSH
  • Session→Saved Sessions: MyConnection
  • SSH→Prefered SSH Protocol version: 2
  • SSH→Auth→Private Key file for auth: $PATH$\MYKEY.PKK (replace $PATH$ with real path to the mykey.PKK file)
  • Session 탭으로 되돌아가서, 'save' 를 눌러 세션 저장
  • 이제 Tortoise SVN 에서 체크아웃등을 해줄 때 다음과 같이 URL 을 적어줍니다. <pre class="code">svn+ssh://MyConnection/home/svn/luu

  • 패스워드 없이 접속이 될겁니다 :)
 

by redrails | 2007/11/21 11:16 | 트랙백 | 덧글(0)

소스 버전 관리툴인 SVN을 사용하는 방법

Subversion

Subversion은 소스 버전 관리 도구이다. 각종 편집기의 플러그인을 이용하시거나 윈도 환경에서 TortoiseSVN 등을 이용하면 쉽게 이용하실 수 있다. TortoiseSVN 등을 이용한다면 용어 설명을 이해하고, 다른 작업들은 제공되는 메뉴와 인터페이스를 보고 적절히 적용하면 된다.

  • 체크아웃 - 최초에 저장소에서 로컬로 파일을 가져오는 것을의미함. 이 때 파일만 가져오는 것이 아니라 저장소의 위치 정보나 이런것들도 다 함께 가져온다. 그렇기 때문에 체크아웃을 한이후에 업데이트나 커밋을 할 때에는 저장소의 위치를 계속해서 다시 써 줄필요가 없다. 그러나 당연히 체크아웃을 할 때에는저장소의 위치를 써 주어야 한다.
  • 업데이트 - 현재 로컬에 있는 파일들보다 더 최신의 파일이저장소에 있다면 가져와서 적용시켜주는 것. svn up 이라고 치면 현재 디렉토리 아래에 있는 것을 모두 업데이트 한다.
  • 커밋 - 바꾼 부분이 있다면 커밋을 하면 된다. 현재 디렉토리와 그 아래에 있는 파일들을 저장소에 적용시킨다. 가능하면 -m 옵션을 이용하여 짤막한 커밋 메시지를 남겨준다.
  • PROJECTNAME은 각각의 프로젝트 이름을 의미한다.

체크 아웃 방법

현재 권장 체크아웃 방식은 svn+ssh 방식이다. https를 올린 다음 아파치 인증 체크 아웃을 쓰는 것이 더 편리한 방법이니 조만간에 이것으로 바꾸는 것이 좋을 것이다.


로컬 체크 아웃

svn checkout file:///var/svn/PROJECTNAME

svn+ssh 체크 아웃

svn을 ssh로 터널링하는 방법이다. 패스워드는 시스템 계정을 써야 한다. 현재 사용하는 계정의 이름과 개발 서버 계정의 이름이 다르다면 다음과 같은 형태로 접근하여야 한다.

svn co svn+ssh://username@xx.co.kr/var/svn/PROJECTNAME

패스워드는 3번 정도 물어보는데 틀린 것이 아니니 계속 같은 패스워드를 입력해 준다.


파일을 추가하거나 커밋하는 방법

체크아웃을 한번 하고 나면 저장소의 주소가 설정으로 저장되므로, 다시 쓰지 않아도 된다. 현재 저장소의 상태를 보려면

svn status

를 하면 추가될 파일, 저장소에 없는 파일, 수정된 파일, 충돌이 일어난 파일 등이 표시된다. 저장소에 파일을 추가할 때에는

svn add files

를 쓰면 되고, 커밋을 할 때에는

svn ci -m '메시지'

를 쓰면 된다. 메시지에는 커밋할 때 변경한 것을 간략하게 요약해서 써 준다. 아울러 커밋하기 전에 제대로 동작하는 소스인지를 반드시 확인하여야 한다.

새로운 브랜치를 만드는 방법

svn copy SRC DST

를 사용하면 된다. svn copy 는 local 내용 외에도 URL 에 있는 내용으로부터 복사를 할 수도 있다. svn copy의 주 용도는 새로운 branch 또는 tag를 만들기 위함이다. 이것은 OS에 있는 복사의 기능과 같은 역할을 하지만 저장소에 물려 있는 파일들을 복사할 때 단순히 디렉토리를 복사하면 안 된다. .svn 디렉토리는 특별하게 취급되는 것이니 복사하면 안 되며, svn copy로 복사하면 로그가 복사한 것으로 남지만 OS에서 복사한 뒤 add하면 새로운 파일을 추가한 것으로 로그가 남기 때문에 분명히 차이가 있다.


저장소 디렉토리 구조

svn에서 커밋을 하면 다음과 같은 디렉토리가 있다. 각각의 디렉토리에 대하여 간단히 설명한다. 꼭 이대로 할 필요는 없지만 이렇게 하는 것이 가장 좋을 것 같아서 가이드를 정한다.

  • trunk - 프로젝트의 줄기 부분이다. 여기에 메인 프로젝트 파일들이 들어간다. 밑에 여러 디렉토리가 들어갈 수 있다.
  • branch - 프로젝트의 가지 부분이다. 주류와 다르게 특별한기능을 넣고 싶거나 한 경우가 생기면 trunk에서 이곳으로옮겨서 작업하거나 이곳에 새로 작성하여도 된다. branch가성공적이면 나중에 trunk에 합쳐 넣기도 한다.
  • tags - trunk는 계속적으로 작업이 지속되는 공간이다. 특정 시점에서 보관을 하고 싶다면 trunk에서 이곳으로 옮겨놓을 수 있다. tags 밑에 릴리즈 버전을 붙여서 넣어두거나 하면 된다.

svn 에디터 설정

기본으로 아마 nano 에디터가 되어 있을 텐데 vim으로 변경하려면 환경 변수를 바꿔주면 된다.

export SVN_EDITOR=/usr/bin/vim

환경 설정 파일등에서 SVN_EDITOR 변수를 설정하면 된다.


by redrails | 2007/11/21 11:13 | 트랙백 | 덧글(0)

Ruby on Rails의 테스팅 전략

난이도 : 중급

Bruce Tate, CTO, RapidRed

2007 년 10 월 23 일

테스팅은 Ruby on Rails 커뮤니티에서 입지를 굳건히 하고 있습니다. Rails 스택부터 커버리지용 RCov, 테스트케이스를 강화시킬 수 있는 Mocha와 FlexMock에 이르기까지 많은 툴들이 있습니다. 하지만, 툴들마다 다양한 전략이있습니다. 여러 가지 기본적인 테스팅 전략의 장단점을 배워봅시다.

Rails플랫폼의 가장 뚜렷한 특징 중 하나는 Ruby 언어 그 자체이다. 동적으로 유형화 된 언어로서, Ruby는 상당히 유연하고,편리하며, 강력하다. 하지만, 단점도 있다. 동적으로 유형화 된 언어들은 비교적 일반적인 유형 에러와 오자를 포함하여 특정종류의 에러를 잡을 수 있는 컴파일러가 없다. 동적으로 유형화 된 객체 지향 언어 사용자들은 테스트에 대한 필요성을 일찌감치배웠다.

 

 



Ruby on Rails 커뮤니티는 미국이 아메리칸 아이돌(American Idol)을 포용하듯

테스팅을 수용하고 있다. 매우 규칙적으로, 테스트 케이스 결과표를 검사한다. Ruby 개발자는 테스팅에 대해 많은 이야기 한다.그들의 블로그도 테스트에 대한 이야기이다. 심지어 전화 투표가 아닌 오픈 소스 프레임웍에 기여함으로써 후방에서도 참여하고 있다.

테스팅이 없다면, Ruby 애플리케이션은 코드 라인 당 에러 발생 빈도가 훨씬 높아진다. 테스팅을 한다면, 동적으로 유형화된언어에 어느 정도의 효과가 있다. 이 글에서는, 테스트를 해야 하는지 여부, 테스팅이 중요한 이유를 매니저에게 설득하는 방법같은 기본적인 주제로 여러분을 따분하게 만들지 않을 것이다. 여러분은 이미 테스트를 하고 있을지도 모른다. 대신, 모든 Ruby프로젝트 리더가 해야 하는, 보다 미묘한 테스팅 결정들을 상세히 살펴 보도록 하겠다. 테스팅 범위를 측정하는 방법, 테스팅 분량등을 설명하겠다. 기본적인 테스팅 기술과 새로운 mock 프레임웍을 비교할 것이다. 지루한 튜토리얼을 제공하는 대신,ChangingThePresent.org(참고자료)를 구현하는데 사용했던 기술을 예제를 통해 설명하겠다. 다양한 기술들의 장점과 단점을 알 수 있을 것이다.

기존 Rails 테스팅

Rails프레임웍은 자체적으로 매우 강력한 테스팅을 갖고 있다. 적은 노력으로 반복적인 데이터베이스 설치를 지정할 수 있고, 시뮬레이트된 HTTP 메시지를 웹 애플리케이션에 보낼 수 있으며, 세 가지 종류의 테스트, 단위 테스트(unit test), 기능테스트(functional test), 통합 테스트(integration test)를 수행한다.

단위 테스트

단위 테스트는 Rails 모델 코드와 가끔씩 헬퍼를 실행한다. 단위 테스트는 모델이 구현한 대로 작동하는지, 모델에 있는 제휴들이여러분이 생각한 대로 작동하는지를 검사한다. 기억해 보면, Rails 모델은 하나의 데이터베이스 테이블을 래핑하는 객체들이다.대부분의 경우, 각 데이터베이스 컬럼은 모델에 있는 애트리뷰트이다. Rails 헬퍼는 모델, 뷰, 컨트롤러 코드를 단순화 하는함수들이다. 각 모델이나 헬퍼가 테스트를 갖고 있는지를 확인해야 한다. ChangingThePresent에서, 가장 기본적인모델에 대한 단위 테스트는 매우 얇다.


Listing 1: 기본적인 모델 테스트
 require File.dirname(__FILE__) +'/../test_helper'class BannerStyleTest < Test::Unit::TestCasefixtures :banner_styles def test_associationsassert_working_associations end deftest_validation_with_incorrect_specs_should_fail bs =BannerStyle.new(:height => 10, :width => 10, :format =>'vertical_rectangle', :model_name => 'Nonprofit') assert !bs.save,bs.errors.inspect bs2 = BannerStyle.new(:height => 400, :width =>240, :format => 'vertical_rectangle', :model_name => 'Nonprofit')assert bs2.save, bs2.errors.inspect end ...end

Listing1에서, 두 개의 테스트를 가진 응축된 테스트 케이스를 볼 수 있다. 배너 스타일은 간단한 광고 배너를 만든다. 각각의 크기와모양은 느슨한 표준 세트에 기반하고 있다. 이 애플리케이션은 표준 테이블을 사용하여 각각의 새로운 배너가 표준에 순응하는지를확인한다. 첫 번째 테스트는 헬퍼를 사용하여 리플렉션을 통해서 BannerStyle에 대한 모든 제휴들을 실행한다. (Listing 2) 두 번째 테스트는 틀린 높이와 넓이를 가진 배너가 저장될 수 없다는 것을 확인하고, 모델이 유효 스팩을 가진 배너를 정확히 저장한다는 것을 확인한다.


Listing 2. 제휴를 테스트 하는 헬퍼
def assert_working_associations(m=nil) m ||=self.class.to_s.sub(/Test$/, '').constantize @m = m.newm.reflect_on_all_associations.each do |assoc|assert_nothing_raised("#{assoc.name} caused an error") do@m.send(assoc.name, true) end end trueend

Listing 2는 클래스에 대한 모든 제휴들을 실행하는 헬퍼를 보여준다. assert_working_associations 메소드는 클래스에 대한 모든 제휴들을 검사하고 모델에 제휴의 이름을 보낸다. 이러한 catch-all은 모델 당 한 줄의 코드로 모든 모델 테스트에 대한 모든 관계를 호출할 수 있다는 것을 확인한다.

기능 테스트와 통합 테스트

기능 테스트는 고립된 HTTP 요청을 통해 사용자 인터페이스를 시험한다. Rails 프레임웍은 HTTP GET과 POST 명령어를쉽게 호출할 수 있게 해주며, 테스트의 중추를 형성한다. 통합 테스트도 이와 같지만, 많은 HTTP 요청들을 계속하여 호출할 수있다. 이 테스트의 원리와 구조는 같다. Listing 3은 기본적인 기능 테스트 모습이다.


Listing 3. 간단한 기능 테스트
require File.dirname(__FILE__) +'/../test_helper'require 'causes_controller'class CausesController; defrescue_action(e) raise e end; endclass CausesControllerTest <Test::Unit::TestCase fixtures :causes, :members, :quotes,:cause_images, :blogs, :blog_memberships def setup @controller =CausesController.new @request = ActionController::TestRequest.new@response = ActionController::TestResponse.new end def test_index get:index assert_response :success assert_template 'index' assert_not_nilassigns(:causes) assert_equal Cause.find_all_ordered.size,assigns(:causes).size end def test_should_create_blog assertCause.find(2).blog.nil? get :create_blog, :id => 2 assertCause.find(2).blog.nil? login_as :bruce get :create_blog, :id => 2assert !Cause.find(2).blog.nil? assert_equal Cause.find(2).name,Cause.find(2).blog.title end

Listing 3에서, 테스트와 시스템 간 인터랙션이 모두HTTP GET과 POST를 통해 이루어 진다는 것을 알 수 있다. 테스트의 기본 흐름은 다음과 같다.

  1. 간단한 HTTP 연산을 실행한다.
  2. HTTP 연산이 시스템에 미치는 영향을 테스트 한다.

게다가, Listing 3의 설정 메소드는 테스팅 스카폴드를 설정하여 HTTP 호출을 시뮬레이트 한다. 테스트 스카폴드는 네트워킹과 인프라스트럭처용 요구 사항을 제거하면서, 테스트 케이스를 애플리케이션 자체로 고립시킨다.

스텁

ChangingThePresent.org의 경우, 로그인 같은 일을 쉽게 수행할 수 있도록 하는 테스트 헬퍼 메소드를 추가했다. Listing 3의 test_should_create_blog 메소드의 다섯 번째 라인에서 login_as :bruce 메소드를 볼 수 있다. 이것은 Listing 4의 헬퍼를 호출하는데, 이는 사이트 로그인 기능을 제거하면서, 멤버의 아이디를 세션에 직접 복사한다. Rails acts_as_authenticated를 사용했다면, 로그인 한 사용자가 세션 내에서 :user 키와 제휴된 값을 설정할 것이라는 것을 알 것이다.


Listing 4. 로그인 제거하기
def login_as(member) @request.session[:user] = member ? members(member).id : nilend

많은 개발자들은 스텁과 mock의 개념을 혼동하고 있다. 스텁은 실제 구현을 더 단순한 구현으로 대체하는 것이다. Listing 4에서, 스텁은 전체 로그인 시스템을 간단한 것으로 대체했다. 스텁의 역할은 실제를 시뮬레이트 하는 것이다. Mock은 스텁이 아니다. Mock 객체는 애플리케이션이 인터페이스를 사용하는 방식을 측정하는 게이지와 같은 것이다. 스텁에 대해 예제를 사용하여 보다 자세히 설명하겠다.




위로


기본 개념

Rails의 기존 테스팅의 핵심을 배웠다. 더 진행하기 전에, 두 가지의 핵심적인 결정들이 필요하다. 얼마나 많이, 얼마나 빠르게 테스트할 것인가? 전체적인 테스팅 개념을 수립하게 되면, 커버리지와 속도와 관련한 장단점을 주의해야 한다.

커버리지

가장 중요한 결정 중 하나는 얼마나 많이 테스트를 할 것인가 이다. 충분히 테스트를 하지 않으면, 코드 품질을 타협하게 되고,심지어는 딜리버리 시간도 늦어지게 된다. 또한, 너무 많이 테스트 할 수도 있다. 너무 많이 테스트 하게 되면, 비즈니스에중요한 데드라인을 놓치게 된다. 테스트 분량에 대한 현명한 결정을 내리려면, 이미 어느 정도의 테스트를 수행하고 있는지를 정확히측정해야 한다. 테스팅에 있어서 가장 중요한 것 중 하나가 코드 커버리지이다.

ChangingThePresent의 경우, RCov를 사용하여 테스트 커버리지를 결정한다. 전통적인 rake 명령어를 실행하고 결과(DOT TRAIL)를 얻는다. 또한, rake test:coverage를 실행하여 Listing 5에서 보이는 것 같은 보다 완전한 리포트를 얻는다.


Listing 5. RCov를 사용하여 rake test:coverage 실행하기
807 tests, 2989 assertions, 0 failures, 0errors+----------------------------------------------------+-------+-------+--------+|File | Lines | LOC | COV|+----------------------------------------------------+-------+-------+--------+|app/controllers/address_book_controller.rb| 142 | 123 | 84.6% ||app/controllers/admin_controller.rb | 77 | 65 |93.8% ||app/controllers/advisor_admin_controller.rb | 86 | 63 | 88.9%||app/controllers/advisors_controller.rb | 52 | 42 | 100.0%|...|app/models/stupid_gift.rb | 56 | 45 | 100.0%||app/models/stupid_gift_image.rb | 10 | 10 | 100.0%||app/models/titled_comment.rb | 2 | 2 | 100.0% ||app/models/upgrade.rb| 13 | 10 | 100.0% ||app/models/upgrade_item.rb | 3 | 3 | 100.0%||app/models/validation_model.rb | 7 | 7 | 100.0%||app/models/volunteer_opportunity.rb | 137 | 129 | 93.0%||app/models/work_period.rb | 5 | 4 | 100.0%|+----------------------------------------------------+-------+-------+--------+|Total| 12044 | 10044 | 81.8%|+----------------------------------------------------+-------+-------+--------+81.8%167 file(s) 12044 Lines 10044 LOC

RCov는 실행하는데 훨씬 더 많은 시간이 걸리기 때문에(우리 테스트의 두 배), 모든 것에 그 명령어를 실행하지 않지만, 실행할경우에는 주어진 파일에 대한 테스트 커버리지가 어느 정도인지 정확히 알려줄 수 있다. 여전히, 브라우저에서 커버리지 파일을열어, 나의 테스트 케이스가 커버 할 코드 라인이 어떤 것인지를 정확히 본다. 그림 1은 전형적인 커버리지 리포트 예제이다.


그림 1. RCov 리포트

숫자가 있을 경우, 정확히 얼마만큼 테스트 할 것인지에 대한 대략적인 계산을 시작할 수 있다. ChangingThePresent의경우, 수시로 변하는 테스트 커버리지 통계가 나왔지만, 80%에서 85% 사이의 숫자로 정착했다. 새로운 주요 기능들은 개발중이기 때문에, 커버리지는 임시적으로 감소할 것이다. 이러한 새로운 기능을 온라인으로 가져오면, 커버리지가 늘어날 것이다.현재, 커버리지는 81.7%이다.

우리가 내놓은 대답이 여러분의 의견과 같지 않을 수 있다는 것을 명심하라.테스트 커버리지는 팀의 개발자의 경험, 애플리케이션의 복잡성, 애플리케이션의 에러에 대한 내구성, 비즈니스의 지연에 대한내구성에 따라 달라진다. 비행기 엔지니어링 애플리케이션을 구현하고 있다면, 더 많은 테스트가 필요하다. Facebook용 Web2.0 애플리케이션을 구현한다면, 테스트를 적게 해도 된다. 필자가 알고 있는 최고의 Ruby 프로그래머들은 80% 이상의 실행코드 커버리지를 제안하고, 일부는 100% 커버리지를 목표로 하고 있다.

100% 커버리지를 달성한다고 해도, 테스트가 잘 된 것이라고 보장할 수 없다. 테스트의 유형을 고려하여 최상의 커버리지를 갖도록 해야 한다.

테스트 커버리지를 이해할 수 있는 툴이 생겼으니, 테스팅 속도에 대해 논해보자. Rails에서, 데이터베이스는 테스트의 속도를결정한다. 데이터베이스 지원 테스트 툴의 전통적인 방식은 문제가 많다. 두 개의 가장 큰 문제는 반복과 속도이다. 반복의관점에서 보면, 데이터베이스를 바꾸지 않고는 좋은 테스트 수트를 구현하기 힘들지만, 데이터베이스를 바꾸면 테스트 데이터를 바꿔야하고, 이는 테스트의 작동을 변화시킨다. 두 번째 문제는 속도이다. 데이터베이스를 바꾸는 것은 비용이 많이 든다.

속도

여러분도 알다시피, Rails 환경은 반복 문제를 해결했다. 각각의 개발자들은 테스트 데이터로 픽스쳐를 설정한다. 각 테스트케이스 전에, Rails 테스팅 프레임웍은 모델의 데이터를 지우고, 테스트 케이스에 지정한 픽스쳐(fixture)를 로딩한다.각각의 테스트 케이스는 깨끗한 상태에서 시작될 수 있다. 하지만, 테스트 케이스가 여러 개의 테스트를 갖고 있다면, 각자 서로완전히 무관해야 한다. 각각의 테스트용 픽스쳐 전체 세트를 로딩하면 너무 느려질 수 있다.

Rails는 어느 정도의 타협점을 통해서 속도 문제를 해결한다. 각각의 테스트 케이스를 실행한 후에, Rails는 모든 데이터베이스 변경 사항들을 롤백(roll back)한다. 롤백은 모든 픽스쳐 데이터를 처음부터 로딩하는 것 보다 훨씬 빠르다. 데이터베이스 액세스 비용을 무시할 수는 없다. 롤백을사용할지라도, 데이터베이스 기반 테스팅은 느리다. 테스트가 너무 느리면, 개발자들은 테스트를 실행할 수 없게 된다. 테스트를실행하지 못하면 쓸모가 없다. Rails가 반복 문제를 해결했지만, 속도 문제는 완전히 해결할 수 없다.

한 가지 대안은 테스트에 인 메모리(in-memory) 데이터베이스를 사용하는 것이다. 일반적으로, SQLite은 MySQL보다 훨씬 빠르다. 단점은 실행 시스템과 같은 플랫폼에서 테스트를 할 수 없다는 점이다.

데이터베이스 기반 테스팅에 ActiveRecord를 사용한다면, 데이터베이스 지원 테스팅으로 모든 단위 테스트를 수행할 수 있을것이다. 하지만 느린 속도를 감수해야 한다. 데이터베이스 지원 모델을 사용하여 기능 테스트를 해야만 하는 법칙은 없다. 많은Rails 개발자들은 스텁이나 Mock을 사용하여 데이터베이스를 활용하면서, 빠른 기능 테스트를 수행하고 있다.




위로


Mocha와 FlexMock에서 Mock과 스텁 실행하기

스텁은 실제 구현을 더 간단한 구현으로 대체하는 기술이라고 설명했다. 테스트 케이스는 스텁을 사용하여 구현을 더욱 단순하고,빠르고, 예견 가능한 것으로 만든다. 예를 들어, 시스템 시계를 사용하여 같은 시간을 늘 리턴하여, 테스트가 여러분이 확인할 수있는 반복적인 결과를 낼 수 있도록 해야 한다.

Mocha 프레임웍에서는 스텁을 쉽게 수행할 수 있다. 여러분이 기대한 결과를 정의하기만 하면 된다. 다음 코드는 시스템 클래스 Date를 생성하여, 같은 날짜, 이를 테면 Ground Hog Day를 리턴한다. (Listing 6)


Listing 6. 스텁 만들기
ground_hog_day = Date.new(2007, 2,2)Date.stubs(:today).returns(ground_hog_day)assert_equal 2,Date.today.day

스텁이 실제의 것을단순하게 시뮬레이트 하는 것이라면, Mock은 그 이상이다. 가끔, 실제의 것을 모방하는 것으로는 충분하지 않을 때가 있다.테스트 할 때, 여러분의 코드가 API를 정확히 사용하는지를 확인해야 한다. 예를 들어, 네이티브 데이터베이스 애플리케이션이연결을 개방했는지, 쿼리를 실행하는지, 연결을 닫았는지를 확인해야 한다. 컨트롤러가 실제로 모델 객체에 save를 호출하는지를 확인해야 한다. 따라서, Mock 객체는 작동은 물론 기대하는 바도 확립해야 한다.

Rails는 적어도 세 개의 Mock 라이브러리를 갖고 있다. Mocha, FlexMock, RSpec이 바로 그것이다. 필자는Mocha에 초점을 맞추겠지만, 나머지도 고유의 장점을 갖고 있다. Mocha를 사용하면, 예상 API 호출을 명시한 다음에결과 Mocha가 리턴된다. (Listing 7)


Listing 7. Mocha Mock 라이브러리
mock_member =mock("member_67")mock_member.expects(:valid?).returns(true)mock_member.expects(:save).returns(true)mock_member.expects(:valid_captcha=).with(true)mock_member.expects(:plaintext_password).returns('password')mock_member.expects(:id).returns(67)Member.expects(:find_by_login).with(nil).returns(mock_member)post:create, :member => {}, :nonprofit => {:id =>67}...assert_response :redirectassert_redirected_to :controller =>'nonprofits', :action => 'show', :id => mock_nonprofit_id

Listing 7은 새로운 멤버를 만드는 테스트케이스 예제를 보여주고 있다. 컨트롤러와 Mock 사용자 간 인터랙션에 대한 기대치를 만든다. Mock 멤버를 만들고 각각의인터랙션을 개별적으로 정의한다. 그런 다음, Member 클래스를 모방하고, mock_member를 리턴하는 파인더를 모방한다.

모델 레이어와의 인터랙션이 깊게 개입되어 있지만, Mock 객체는 멤버 작동을 기능 테스트 케이스에서 완벽히 분리한다. 이렇게하면 두 가지의 효과를 볼 수 있다. 신용 카드 체크아웃과 자멸(self-destruct) 스위치 같은 특정 API를 사용하는것은 현실적이지 않다. 시간 또는 메모리 기반 서비스 같은 기타 API들은 충분하지 않다. Mock 객체 프레임웍을 사용하여이들을 시뮬레이트 해야 할 것이다.

데이터베이스 지원 모델을 시뮬레이트 해야 할지 여부를 결정하는 것도 흥미롭다.한 가지 장점은 속도이다. 이 테스트 케이스는 데이터베이스를 전혀 히트하지 않는다. 또 다른 장점은 독립성이다. 테스트를 받고있는 코드를 컨트롤러 레이어와 완전히 분리한다. 하지만, 몇 가지 단점도 있다. 테스트 케이스가 상당히 복잡해진다. 또한, 모델객체와 이와 관련한 테스트 케이스를 수정해야 하기 때문에, 모델의 작동을 수정 할 때마다 변화의 폭이 심하다. 테스트 케이스가중요한 것을 놓치기도 한다. 하나의 밸리데이션을 추가하여 중요한 시나리오가 중단될 수도 있지만, 전혀 알려지지 않는다. 이와같은 이유로, ChangingThePresent의 경우 모델 객체 클래스들을 모사하지 않는다. Mock을 서드 파티에 대한 웹서비스나 네트워크 서비스 같은 외부 인터페이스로 제한한다.

Ruby 커뮤니티는 Mock의 전략적 방향에 상당히 의존적이다. 필자는 데이터베이스 지원 테스팅을 고수하기로 결정했다. 우리는 두 가지 모두를 시도했다. 코드 베이스에 더욱 잘 맞기 때문에 이러한 기술들을 사용하기로 한 것이다.




위로


Continuous integration

가장 중요한 향상은 continuous integration (CI)이다. 우리는 Ruby 버전의 Cruise Control을실행한다. CI 서버는 깨끗한 구현을 검사하고 새로운 변화가 생길 때마다 처음부터 테스트 케이스를 실행한다. 서버는 변경사항으로 구현이 중지될 때마다 개발자에게 공지한다. 이 서버로는 체크인 하기 전에 몇 가지 대표적인 테스트를 실행할 수 있다.Member에서 몇 줄을 수정한 다음, unit/member_test.rbfunctional/members_controller_test.rb를 실행한다. 15초가 지난 다음, 체크인 할 수 있고, Cruise Control이 잘못된 부분을 알려준다.

결론

몇 년 전에는, 자동화된 테스팅이 과연 좋은 것인지에 대한 논의가 있었다. 이제, 이러한 논의는 더 재미있어졌다.

  • 모든 테스트가 데이터베이스 기반이어야 하는가, 아니면 Mock과 스텁을 사용하여 기능 테스트를 고립시켜야 하는가?
  • 100% 커버리지가 현실적으로 가능한가?
  • 인-메모리 테스트의 속도가 부가적인 위험 요소들을 상쇄하는가?

여러분에게 해줄 수 있는 말은 여러분의 작업 특성과 고객에 맞게 기술을 선택하라는 것이다. 일부 전문가의 말을 무조건 맹신하지말라. 향후 몇 년 안에 이 모든 것에 대한 대답을 얻지 못할 수도 있다. 새로운 기술이 탄생하고, 기존 기술이 밀려난다.문서상으로 기록된 것이 실제의 Rails를 정확히 반영하는 것은 아니다.



참고자료

교육

제품 및 기술 얻기

토론

by redrails | 2007/11/21 10:40 | Ruby on Rails | 트랙백 | 덧글(0)

Silverlight 설치환경




Silverlight 설치환경)




1. Runtime

Microsoft Silverlight 1.0 Beta Download
Microsoft Silverlight 1.1 Alpha Download


2. Developer Tools 

Microsoft Visual Studio codename "Orcas" Beta 1 Download
Microsoft Silverlight Tools Alpha for Visual Studio codename "Orcas" Beta 1 Download
(Visual Studio 2008 에 Add in 프로그램)

3. Designer Tools

Expression Blend 2 May Preview Download
Expression Media Encoder May Preview Download
Expression Design Download


4. Software Development Kit

Microsoft Silverlight 1.0 Beta Software Development Kit (SDK)  Download
Microsoft Silverlight 1.1 Alpha Software Development Kit (SDK) Download

굵은표시는 .net 환경에서 개발테스트에 필요한 최소한의 개발툴입니다. Expression Blend 2 May Preview는 복잡한 xaml 코딩 및 디자인을 효률적으로 하기 위해 개발자도 알아야 할 디자인 툴입니다. 

※ Microsoft에서 제작된 설치동영상을 참고하실분은 동영상을 참조하시기 바랍니다.

※ 모든 설치가 완료가 되었다면 Microsoft Visual Studio codename "Orcas" Beta 1을실행하여 메뉴에서 [File]-[New]-[Project] 순서로 클릭하면 [New Project] 선택 대화상자가출력됩니다. [그림 1]에서 보시는 것처럼 [Project Types] 목록에 [Silverlight]항목을 확인하실 수있습니다. 만약 설치되지 않았다면 Silverlight Add-in Tool인 Microsoft Silverlight Tools Alpha for Visual Studio codename "Orcas" Beta 1 를 설치하면 됩니다.

※ 참고로 2007년 06월 Microsoft Visual Studio codename "Orcas" Beta 1Microsoft Visual Studio 2008로 코드명이 정식변경 되었습니다.

http://msdn2.microsoft.com/ko-kr/vstudio/default.aspx

by redrails | 2007/11/20 16:41 | Ruby on Rails | 트랙백 | 덧글(0)

Rails On Ubunt

오늘 Ubuntu 7.10 을 깔았습니다.

간만에 만져봐서 인지, 버벅거리다가 설치를 끝냈고,

Rails & Python & Java & apm 세팅을 준비 중입니다.

주로 맥에서만 개발해서인지, Ubuntu에서 Rails 세팅하기가 약간 귀찮더군요 :D

농담입니다 ^^;

mongrel 과 Ferret , Rspec, zentest 설치에 관한 문서가 없어서, 열심히 구글링을 하고

대략 10번의 삽질 끝에 mongrel_cluster + capistrano 가 올라가는 것을 보고 흐뭇해 하고 있습니다. ^^;

그럼 Ubuntu에 Rails 세팅하는 법을 적어보겠습니다.

맥 보단 상당히 쉽더군요 :D

일단 루비부터 깔아야겠죠 ?

$ sudo apt-get install ruby irb rdoc ibmysql-ruby

그 다음은 패키지 관리자인 rubygem 입니다.

$ sudo wget http://rubyforge.org/frs/download.php/11289/rubygems-0.9.0.tgz
$ tar -xvzf rubygems-0.9.0.tgz
$ cd rubygems-0.9.0
$ sudo ruby setup.rb

자 마지막으로

$ sudo gem install rails --include-dependencies

해주시면 끝입니다. ^^

현재 각 버전은 ruby - 1.8.6 rails - 1.2.5 입니다.

자 이제는 각종 패키지들을 깔아야 할 시간입니다.

제가 좀 막힌 부분이기도 한데요

http://soakedandsoaped.com/articles/2006/09/13/install-mongrel-on-ubuntu-6-06-dapper
http://www.urbanpuddle.com/articles/2007/05/09/install-ruby-on-rails-on-ubuntu-feisty-fawn

등에서 보고 설치했습니다

일단은 mongrel을 설치해야되는데,

Install required dependency fastthread? [Yn]

여기서 자꾸 에러를 뱉어냈습니다.

extconf.rb:1:in `require’: no such file to load—mkmf (LoadError)

from extconf.rb:1


Because Mongrel is partly written in C/C++ for more performance, you have to install the build-essential package. It will install all needed packages so that you can compile C/C++ applications.

이런 이유이더군요


ferret도 마찬가지였습니다. 그래서 구글링을 해서

$ sudo apt-get install build-essential



$ sudo apt-get install ruby1.8-dev

을 해주고 설치를 하니 잘되더군요 :)


이제 부가적으로 몽그렐 클러스터와 카피스트라노 외 기타 유용한 패키지를 설치해야됩니다.

$ sudo gem install railsmachine

을 입력하시면 됩니다.

마지막으로 BDD 툴인 rspec과 zentest, redgreen 등을 설치 합니다.

$ sudo gem install rspec

$ sudo gem install zentest

$ sudo gem install redgreen


이상 우분투에서 rails 세팅하는 방법이였습니다.

내일은 java, python 세팅을 시작할 계획입니다.

완료되는데로 글 올리겠습니다.

by redrails | 2007/11/07 19:42 | Linux | 트랙백 | 덧글(0)

우분투 7.10 설치 전 작업 및 설치 후 기본적인 프로그램 설치법/오류사항 대처 방법


1. 설치 전 파티션 설정

먼저 파티션 설정에 자신 없으신 분들은 자동 설치를 권장합니다.
저는 컴퓨터에 OS로 우분투 하나만 설치를 했기 때문에 데이터 백업을 위한 파티션이 필요했습니다.
그래서 수동으로 파티션을 설정하여 우분투를 설치했습니다.
제 컴퓨터는 80G와 15G, 두 개의 HDD를 가지고 있으며 아래와 같이 파티션했습니다.
이는 웹사이트를 검색하면서 여러 번 시행착오 끝에 제 컴퓨터에 만족되는 구성을 만든 것이며 각자 본인의 취향에 따라 다를 수 있습니다.

hda1 / 19G -> 필수
hda2 swap 1024M -> 필수, 제 메모리 크기와 같게 설정, 메모리가 작다면 본인 메모리의 2배로 설정
hda3 /home/자신의계정/documents 60G -> 선택, 데이터 백업용 파티션

hdb1 /home/자신의계정/vm 15G -> 선택, 가상머신(virtualbox)을 위한 파티션

설치 후 터미널에서

sudo nautilus

백업용 파티션과 가상머신 파티션 폴더를 마우스 오른쪽 클릭 > 속성 > 권한 탭에서 소유주, 그룹을 자신의 계정으로 설정


2. 설치 완료 후 소스리스트 변경과 프로그램 업그레이드

기본 소스리스트보다 다음 미러가 업그레이드 속도가 빠르다고 느껴져서 글을 남깁니다.
터미널에서 아래와 같이 실행

sudo gedit /etc/apt/sources.list

http://kr.archive.ubuntu.com/ubuntu/

ftp://ftp.daum.net/ubuntu/
로 모두 변경 후 저장

sudo apt-get update
sudo apt-get upgrade


3. '맑은 고딕'체 적용시키기

기본 글꼴보다 '맑은 고딕'체가 가독성이 좋은 것 같아서 올립니다.

먼저 구글이나 기타 검색엔진을 통해서 '맑은 고딕'체를 다운로드합니다.
rar파일로 되어 있으므로 압축을 풀기 위해 터미널에서 아래와 같이 실행한 후 압축 해제

sudo apt-get install unrar

압축 해제된 malgun.ttf 파일을 아래 폴더로 이동 또는 복사합니다.

/usr/share/fonts/truetype
또는
/home/.fonts

그리고 아래 명령 실행

fc-cache -f -v

시스템 > 기본 설정 > 모양새 > 글꼴 탭으로 들어가서 글꼴을 적용, "자세히"로 들어가서 각자 취향에 맞게 설정
글꼴이 깨져보이면

sudo gedit /etc/fonts/language-selector.conf




ko


10


22


false


false


hintmedium



antialias, autohint 부분의 false를 true로 변경, 저장 후 재부팅


4. virtualbox 설치 및 발생하는 오류들 대처법

(1) 설치

http://virtualbox.org/wiki/Downloads로 들어가서 각자 OS환경에 맞는 패키지를 다운 받습니다.
패키지를 설치하고 기본적인 설정들은 아래 싸이트를 참조하세요~

http://kldp.org/node/82148

(2) 아래와 같은 오류 시

출처 : 팁/기술정보 게시판에서 "떠돌이"님께서 올려주신 글입니다.

Could not load the Host USB Proxy Service (VERR_FILE_NOT_FOUND). The service might be not installed on the host computer.
ResultCode: 0x80004005Component: HostInterface: IHost{81729c26-1aec-46f5-b7c0-cc7364738fdb}Callee: IMachine{31f7169f-14da-4c55-8cb6-a3665186e35e}

sudo gedit /etc/init.d/mountdevsubfs.sh

#
# Magic to make /proc/bus/usb work
#
#mkdir -p /dev/bus/usb/.usbfs
#domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
#ln -s .usbfs/devices /dev/bus/usb/devices
#mount --rbind /dev/bus/usb /proc/bus/usb

에 해당하는 부분을 찾아,

#
# Magic to make /proc/bus/usb work
#
mkdir -p /dev/bus/usb/.usbfs
domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
ln -s .usbfs/devices /dev/bus/usb/devices
mount --rbind /dev/bus/usb /proc/bus/usb

로 아래 네 줄의 #을 삭제하여 주석을 벗겨주고 저장 후 재부팅

(3) Windows XP Professional 설치 시 32분 쯤 남았을 때 멈추는 현상

설정으로 들어가서 네트워크를 비활성화시킨 후 설치
설치 완료 후 네트워크를 활성화시킨 후 부팅하면 이상없이 사용 가능


5. Avant Window Navigator 설치

출처 : 팁/기술정보 게시판에서 "범이"님께서 올려주신 글입니다.

터미널에서 아래와 같이 실행 후

sudo gedit /etc/apt/sources.list

아래 세 줄 소스리스트에 추가 후 저장

## Avant Window Navigator
deb http://download.tuxfamily.org/syzygy42/ gutsy avant-window-navigator
deb-src http://download.tuxfamily.org/syzygy42/ gutsy avant-window-navigator

터미널에서 아래와 같이 실행

wget http://download.tuxfamily.org/syzygy42/reacocard.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install avant-window-navigator-bzr
sudo apt-get install awn-core-applets-bzr


6. mplayer 설치 및 한글 자막 설정

프로그램 > 추가/제거... 에서 mplayer로 검색해서 MPlayer Movie Player 설치
실행 후 화면에서 마우스 오른쪽 키 > Preferences > Subtitles & OSD 탭에서

Encoding을 Korean charset (CP949)로 변경

Font 탭에서 Browse

/usr/share/fonts 아래에 있는 맘에 드는 폰트 적용


7. 네이트온(knateon) 설치

아래 싸이트를 참조하세요~^^ 7.04(Feisty)용인데 7.10(Gutsy)에도 이상없이 돌아가더군요

http://barosl.com/blog/entry/nateon-for-linux-open-beta



출처 : http://cafe.naver.com/ArticleRead.nhn?clubid=10098758&menuid=&searchtype=1&query=ubuntu&searchdate=all&page=1&articleid=19052

by redrails | 2007/11/07 18:17 | Linux | 트랙백 | 덧글(0)

Data Model Relationships



한국루비사용자포럼에서 가져왔습니다.

출처 : http://forum.rubykr.org/viewtopic.php?t=5132

by redrails | 2007/11/06 18:08 | Ruby on Rails | 트랙백 | 덧글(0)

RadRails Tips



가장 먼저 RadRails 홈에서 제공하는[스크린캐스트](http://download.radrails.org.nyud.net:8090/video/RadRailsScreencast.mov)를 보면서 eclipse 워크벤치의 기능에 대해서 습득하기 바란다.

### 빈 프로젝트만 만들어질 때

윈도우 환경에서 [RadRails](http://www.radrails.org) 는[InstantRails](http://instantrails.rubyforge.org) 배포판을 필요로 한다. 따라서 처음설치시 ruby 와 rails 의 PATH 를 설정해 줄 필요가 있다. window->preferences 에서 Ruby와 Rails 의 옵션을 아래와 같이 수정할 것.

| 옵션 | 설정 |
|-|-|
| ruby > installed interpreters | name=ruby, path=c:\instantrails\ruby\bin\ruby.exe |
| ruby > RI/RDoc | ri=c:\instantrails\ruby\bin\ri, rdoc=c:\instantrails\ruby\bin\rdoc |
| rails > rails installs | name=rails, path=c:\instantrails\ruby |

맥OSX 에서 이와 같은 문제를 만났다면 [이 문서에 따라서 루비와 GEM을 재설치](http://hivelogic.com/articles/2005/12/01/ruby_rails_lighttpd_mysql_tiger)한후, 아래와 같이 설정해보기 바란다.

| 옵션 | 설정 |
|-|-|
| ruby > installed interpreters | name=ruby, path=/usr/local/bin/ruby |
| ruby > RI/RDoc | ri=/usr/local/bin/ri, rdoc=/usr/local/bin/rdoc |
| rails > rails installs | name=rails, path=/usr/local/ |

## Before updating scaffolding from new DB schema, try creating a table for your model (XXX)

scaffold를 생성할 때 위와 같은 에러 메시지가 뜰 때가 있다. InstantRails에 함께 따라온 mysql의 인코딩과 테이블인코딩의 차이 때문에 생기는 문제인 듯. 데이터베이스 전역 charset과 테이블의 charset을 일치시키면 해결된다.UTF8을 추천한다.

## WEBrick Server 추가하기

Server View 에서 기존에존재하는 서버를 삭제할 경우 Rails Navigator 에서 오른쪽 클릭을 한 후 New - WEBrick Server 를이용해서 새로 추가할 수 있다. (이걸 몰라서 계속 재설치하고 삽질했던 나 자신이 부끄럽다. 알고보니 기본적으로 배포되는RadRails 문서에 잘 나와 있었다.)

see also:

* [Eclipse 팁](http://reiot.com/archives/312)


출처 : http://reiot.com/2006/07/22/radrails-tips/#comment-262

by redrails | 2007/11/06 15:56 | 트랙백 | 덧글(0)

◀ 이전 페이지 다음 페이지 ▶