BLOG ARTICLE ruby on rails | 4 ARTICLE FOUND

  1. 2008.10.21 3. Rails 어플리케이션 기본 설정 (4)
  2. 2008.10.20 2. Rails 어플리케이션 생성
  3. 2008.10.15 1. Ruby on Rails 설치 및 설정 (4)
  4. 2008.08.20 Xcode에서의 Ruby on Rails (8)

이전에 생성한 어플리케이션을 브라우져에서 확인해 보기위해 웹서버를 구동합니다. 어플리케이션 폴더에서 아래와 같이 실행합니다.

> script/server

레일즈의 웹서버는 일반적으로 3000 포트를 사용하기 때문에 "URL:3000/"과 같이 주소창에 입력하셔야 합니다. 브라우져에서 Rails의 기본페이지가 보이며, 아래와 같이 해야할 작업들이 나와 있습니다.

1. Use script/generate to create your models and controllers
To see all available options, run it without parameters.

2. Set up a default route and remove or rename this file
Routes are set up in config/routes.rb.

3. Create your database
Run rake db:migrate to create your database. If you're not using SQLite (the default), edit config/database.yml with your username and password.

위에서 지시하는대로 작업을 해보겠습니다.

1. Home 컨트롤러 생성
1) HomeController 를 생성
script내의 generate는 이름 그대로 레일즈에서 컨트롤러, 모델, 스케폴드등을 간편하게 생성할 수 있게 합니다. 시작 페이지를 만들기 위해 아래와 같이 index 뷰를 가진 home 컨트롤러를 생성합니다.

> script/generate controller Home index
      exists  app/controllers/
      exists  app/helpers/
      create  app/views/home
      exists  test/functional/
      create  app/controllers/home_controller.rb
      create  test/functional/home_controller_test.rb
      create  app/helpers/home_helper.rb
      create  app/views/home/index.html.erb

실행이 되면 위와 같이 생성되는 디렉토리와 파일들을 확인할 수 있습니다. app/controllers 디렉토리에서 home_controller.rb가 아래와 같이 생성되어 있습니다.

class HomeController < ApplicationController
  def index
  end

end

2) index.html 삭제
public 디렉토리 아래의 index.html을 삭제합니다. index.html이 존재하면 아래에서 작업할 routes.rb에서의 설정이 무효화됩니다.

> rm public/index.html


2. routes.rb 설정
config 디렉토리 아래의 routes.rb 파일을 오픈합니다. 주석으로 처리된 부분을 제외하면 아래와 같습니다. map.root를 home 컨트롤러로 설정하도록 푸른색으로 된 부분을 추가합니다.

ActionController::Routing::Routes.draw do |map|
  map.root :controller => "home"
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
end

이제 웹 루트('/') 요청을 받게 되면 /home/index로 연결됩니다.

3. 데이터 베이스 설정

1) 데이터베이스, 계정 생성
mysql에서 개발, 테스트, 배포에 필요한 데이터베이스와 계정을 생성합니다.

mysql> create database www_development;
mysql> create database www_test;
mysql> create database www;
mysql> grant all privileges on www_development.* to www_user@'localhost'  identified by '1111';
mysql> grant all privileges on www_test.* to www_user@'localhost'  identified by '1111';
mysql> grant all privileges on www.* to www_user@'localhost'  identified by '1111';

2) database.yml 수정
이제 config 폴더 밑의 database.yml을 오픈하여 위에서 생성한 정보로 변경합니다.

development:
  adapter: mysql
  encoding: utf8
  database: www_development
  username: www_user
  password: 1111
  socket: /tmp/mysql.sock

test:
  adapter: mysql
  encoding: utf8
  database: www_test
  username: www_user
  password: 1111
  socket: /tmp/mysql.sock

production:
  adapter: mysql
  encoding: utf8
  database: www
  username: www_user
  password: 1111
  socket: /tmp/mysql.sock

위의 파일에서 주석으로 되어 있는 부분을 보면 테스트를 위한 데이터베이스는 테스트 실행시 디비를 초기화 하기 때문에 개발과 배포를 위한 데이터베이스는 별도로 만들어야 한다고 경고하고 있습니다.

4. index.html.erb 파일
1) erb
index.html.erb 파일은 HTML과 eRuby 문법을 같이 사용할 수 있는 템플릿 파일입니다. eRuby는 템플릿 파일에서 사용할 수 있는 루비입니다. '<%' 와 '%>'의 사이에서 루비코드를 사용할 수 있습니다.

레일즈에 의해 이전에 생성된 app/views/home/index.html.erb의 내용은 아래와 같습니다.

<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>

2) 동작 확인
db등 변경된 부분을 새로 적용하기 위해 실행되고 있는 script/server를 컨트롤+C를 눌러 종료한 후에 script/server를 재시동합니다. 

브라우져에서 리로드를 하면 아래와 같이 위에서 작업된 내용들이 적용되어 초기화면이 아래와 같이 Home 컨트롤러로 연결되어 있는 것을 확인할 수 있습니다.

제가 루비온레일즈에서 해본 것중 70% 정도까지 온 것 같습니다. 해본 것도 이해를 정확히 못하고 있는데 조금만 있으면 진짜 삽질기로 들어 갈 것 같습니다.


1. 어플리케이션 생성

아래와 같이 rails를 실행하여 루비온레일즈 어플리케이션을 생성할 수 있습니다.

rails application_name (-d database)

  • application_name: 생성될 어플리케이션이름(패스)입니다. 상위 디렉토리의 생성이 필여하면 자동으로 생성합니다.
  • -d database: 사용할 데이터베이스를 설정합니다. 입력하지 않으면 sqlite3가 기본 데이터베이스로 설정합니다.
이제 서버의 적당한 패스에서 아래와 같이 입력하여 www란 어플리케이션을 생성합니다. 실행되면 새로 생성되는 디렉토리와 파일들의 목록이 출력됩니다.

> rails www -d mysql

완료되면 어플리케이션이 생성된 디렉토리로 들어 갑니다. 아래와 같이 파일과 디렉토리들이 생성되어 있습니다.
 

README 파일에는 레일즈 어플리케여션에 대한 소개와 전반적인 사용방법에 대한 간단한 설명이 있습니다. 처음 사용하시는 분들은 한번씩 읽어 보시는 것이 좋습니다.


2. Rails 프레임워크 디렉토리 구조
생성된 각각의 디렉토리는 아래의 용도로 사용됩니다. 아래의 내용들은 위의 README 파일과 아주 잠깐 살펴 보았던 경험을 참조하였습니다.

[?] 로 되어 있는 부분은 아직 한번도 살펴 본적이 없어 용도를 정확히 모르는 곳입니다. 부족하고 틀린 내용들은 조금씩 해 보고 배우면서 계속 보완해 나가고 [?] 를 제거해 나가겠습니다.

/app
어플리케이션의 model, view, controller가 위치하는 폴더 입니다. 사용자가 작성하는 대부분의 코드는 이곳에 위치합니다.

/controller

컨트롤러들이 위치하는 곳 입니다. 컨트롤은 ApplicationController의 서브클래스이며 *_controller.rb와 같은 파일명으로 저장됩니다.

/helpers [?]
핼퍼들이 위치하는 곳입니다. 핼퍼들은 *_helper.rb와 같은 파일명으로 저장되어 있습니다. 핼퍼는 아직 정확한 용도를 모르며 존재여부와 뷰와 연관이 있다고 짐작만 하고 있습니다.

/models
모델들이 위치하는 곳입니다. 모델은 대부분 ActiveRecord의 서브클래스이며, 데이터베이스와 연동하여 데이터에 접근하고 관리하는 역활을 합니다.

/views

HTML 출력을 위한 템플릿 파일들이 위치하는 곳입니다. 각각의 템플릿 파일들은 views 밑에 연관된 컨트롤러 이름으로 된 서브 디텍토리에 위치하며, *html.erb와 같은 파일명으로 저장됩니다.

/layouts

뷰에서 사용하는 header, footer등의 일반적인 레이아웃 템플릿 파일들이 위치하는 곳입니다.

/config

Rails 환경하의 속성, 라우팅, 데이터베이스, 배포등의 설정에 관한 파일들이 위치합니다.

/environments
[?]
배포모드에 따른 설정 파일들이 위치해 있는 것 같습니다.

/initializers
[?]
초기 설정들이 위치해 있는 것 같습니다.

/db
DB 테이블을 생성하는 schema.rb가 위치하는 곳입니다.

/migrate

DB 스키마의 모든 마이그레이션 정보를 가진 파일들이 위치하는 곳입니다.

/doc
[?]
자동으로 생성되는 문서들이 위치하는 곳 같습니다.

/lib
내부적으로 사용되는 라이브러리들이 위치하는 곳이며, 실행시에 기본으로 path내에 포함되어 있습니다.

/tasks
[?]

/log
실행로그들이 위치하는 곳입니다.

/public
document root에 해당하는 웹환경에서 기본이 되는 폴더 입니다. 사이트의 일반적인 구성요소인 html, javascript, stylesheet, 이미지 파일들이 위치합니다.

/images

사용하는 이미지들이 위치하는 곳입니다.

/javascripts

자바스크립트파일(*.js)들이 위치하는 곳입니다.

/stylesheets

스타일쉬트파일(*.css)들이 위치하는 곳입니다.

/script
rails 프레임워크에서 사용하는 각종 스크립트들이 위치하는 곳입니다.

/performance
[?]
성능측정 도구들이 위치하는 곳 같습니다.

/process
[?]
프로세서들을 관리하는 도구들이 위치하는 곳 같습니다.

/test [?]
유닛, 기능, 통합 테스트등에서 사용되는 곳 같습니다.

/fixtures
[?]
·····················

/functional
[?]
기능 테스트시 사용되는 곳 같습니다.

/intergration
[?]
통합 테스트시 사용되는 곳 같습니다.

/unit
[?]
유닛 테스트시 사용되는 곳 같습니다.

/tmp [?]
레일즈에서 사용하는 임시파일들이 저장되는 곳입니다. 아직 어떤 용도로 사용되는지 확인하지 못했습니다.

/cache
[?]
캐쉬가 저장되는 곳 같습니다.

/pids
[?]
프로세스아이디와 관계된 곳 같습니다.

/sessions
[?]
세션이 저장되는 곳 같습니다.

/sockets
[?]
소켓에서 사용하는 곳 같습니다.

/vendor
어플리케이션에서 사용하는 외부 라이브러리 위치하는 곳입니다.

/plugins
[?]
플러그인이 위치하는 곳 같습니다.

부실한 내용과 곳곳에 위치한 [?] 를 보시면 현재 저의 상태(?)와 많은 관심과 애정이 필요하다는 것을 아실 수 있습니다. 많은 지도 부탁 드리겠습니다. ^^;;

Ruby on Rails로 회사 홈페이지를 만들어 보기로 했습니다. Ruby는 몇가지 예제만 만들어 보았고 Rails 역시 간단한 샘플만 따라 해 본 정도입니다.

현재 'rails www'로 프로젝트를 만들어 놓고 관망중인 상태입니다. 실질적으로 만들어 볼려고 하니 경험이 없어 막히는 부분도 많고 진도가 잘 나가지 않네요.

주위에 편하게 물어 볼 사람도 없고 혼자서 계속 삽질만 하고 있습니다. 잘 쓰시는 분들로 부터 지도편달도 받고 배워가는 것을 정리도 하고 동기부여도 할겸 공개적으로 삽질과정을 블로그에 올릴려고 합니다.

제가 설치한 환경은 아래와 같습니다.

  • 리눅스(CentOS 5)
  • Apache 2
  • MySQL 5

아래의 관련 사이트들에서 자료와 문서들을 구할 수 있습니다.


필요한 설치 파일들은 루비온레일즈 다운로드 페이지에 소개되고 링크되어 있습니다. 아래의 방법외에 사용하시는 리눅스 배포본예 따라 yum이나 apt-get을 이용하여 간편하게 설치할 수 있습니다.


1. ruby 설치
루비의 다운로드 페이지에서 최신버젼을 다운로드 받습니다. 현재 안정된 최신 버젼은 1.8.7입니다.

1) 설치
> wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p22.tar.bz2
> tar -xvjf ruby-1.8.7-p22.tar.bz2
> cd ruby-1.8.7-p22
> ./configure
> make
> make test
> make install

2) 확인
쉘상에서 irb를 실행하여 확인할 수 있습니다. irb는 대화형 루비쉘입니다.

> irb
irb> puts "hello"
hello
=> nil
irb> quit


2. RubyGems 설치
RubyGems는 루비 패키지 관리툴입니다. RubyGmes로 루비 프로그램이나 라이브러리등을 손쉽게 설치할 수 있습니다.

> wget http://rubyforge.org/frs/download.php/43985/rubygems-1.3.0.tgz
> tar -xvzf rubygems-1.3.0.tgz
> cd rubygems-1.3.0
> ruby setup.rb


3. Rails 설치
Rails는 위에 설치한 RubyGems로 아래와 같이 간편하게 설치할 수 있습니다.

> gem install rails --include-dependencies


4. MySQL/Ruby 설치
루비에서 MySQL을 사용할 수 있도록 사용할 수 있게 해주는 모듈입니다. 루비에서 공식적으로 지원하는 다른 방법이 있는지는 모르겠습니다.

1) 설치
> wget http://tmtm.org/downloads/mysql/ruby/mysql-ruby-2.8.tar.gz
> tar -xvzf mysql-ruby-2.8.tar.gz
> cd mysql-ruby-2.8pre4
> ruby extconf.rb --with-mysql-dir=/usr/local/mysql
> make
> make install

2) 확인
아래와 같이 test_db.rb 파일을 만들고 쉘상에서 ruby test_db.rb로 실행하여 확인하실 수 있습니다.

require "mysql"
db = Mysql::new("HOST", "USER_ID", "PASSWORD", "DATABASE")
res = db.query("select * from TABLE_NAME")
res.each_hash do |row|
  puts row['FIELD_NAME']
end 


5. passenger 설치
rails는 자체 웹서버를 구동할 수 있지만 아파치와 연동해서 가상 호스트로 사용하는 것이 편하기 때문에 passenger를 설치합니다. passenger외에도 다양한 웹서버가 존재하지만 설치가 가장 간편하기 때문에 passenger를 선택했습니다.

개발시에는 로그나 오류메시지를 친절하게 보여주는 Webrick이나 Mongrel을 사용하는 것이 더 편할 것 같습니다.

1) 설치
현재 버젼은 2.0.3이며 gem으로 설치할 수 있습니다.

> gem install passenger
> passenger-install-apache2-module

2) httpd.conf 파일 수정
메시지를 확인해 보시고 엔터를 입력합니다. 아파치 httpd.conf에 아래의 내용을 추가합니다. (서버의 환경과 버젼에 따라 수정해야될 부분이 있을 수도 있습니다)

LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.0.3/ext/apache2/mod_passenger.so

PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.0.3
PassengerRuby /usr/local/bin/ruby

3) 가상 호스트 등록
httpd-vhosts.conf에 사용할 호스트를 추가하고 아파치를 재시작 합니다. 도메인과 디렉토리는 환경에 맞게 수정합니다.

<VirtualHost *:80>
    ServerName DOMAIN
    DocumentRoot /home/zzerr/www/public
</VirtualHost>


6. 테스트

1) 프로젝트 생성
이제 적당한 디렉토리에서 아래와 같이 실행하여 rails 프로젝트를 생성합니다.

> rails www -d mysql

2) 확인
웹브라우져에서 아파치에 가상호스트로 등록했던 도메인을 입력하여 아래와 같은 메시지가 나오는지 확인합니다.



이제 본격적으로 삽질할 준비를 완료했습니다. 루비온레일즈 초보자의 설치기를 올려 보았는데, 뭐 좋은 거(?) 알고 계신 분들은 많은 조언 부탁드리겠습니다.

'기타' 카테고리의 다른 글

3. Rails 어플리케이션 기본 설정  (4) 2008.10.21
2. Rails 어플리케이션 생성  (0) 2008.10.20
1. Ruby on Rails 설치 및 설정  (4) 2008.10.15
아이팟 터치 2세대  (8) 2008.10.10
OS X 루트계정 활성화  (6) 2008.10.08
nib 파일 둘러보기  (7) 2008.09.01

사용자 삽입 이미지
OS X 10.5에는 Ruby(1.8.6), Rails(1.2.6), SQLite3(3.4.0)가 기본으로 설치되어 있습니다. 그렇기 때문에 추가적인 설치나 설정 없이 편리하게 RoR 환경에서 손쉽게 웹사이트를 만들 수 있습니다.

오늘 오전에 Ruby에 관련된 포스팅을 해서 그런지 문득 Xcode에서도 RoR 환경을 지원하는지 궁금하여 자료를 찾아 보았습니다. ADCDeveloping Rails Applications on Mac OS X Leopard 에서 관련된 내용을 찾을 수 있었습니다. 이 문서를 참조하여 간단히 설명해 보겠습니다.


1. Rails 업그레이드
Xcode에서 사용하기 위해서는 Rails 2.*로 업그레이드를 해야 합니다. (주의: 조금 지난 서적들과 예제들은 Rails 1.*로 설명이 되어 있습니다. 업그레이드를 하시면 변경된 부분 때문에 따라하기 어려울 수 있습니다.)

터미널에서 아래와 같이 명령어를 실행하여 최신버젼으로 업그레이드를 합니다.
$ sudo gem update --system
$ sudo gem install rails
$ sudo gem update rake
$ sudo gem update sqlite3-ruby

설치가 완료된 후에 'rails -v'로 버젼을 보면 현재 '2.1.0'으로 업그레이드 되어 있는 것을 확인할 수 있습니다.


2. 프로젝트 생성
터미널에서 아래의 명령어를 실행하여 프로젝트를 생성합니다. 결과가 출력되면서 해당 디렉토리 밑에 WishList란 디렉토리가 생성되어 있습니다.

$ rails WishList
$ cd WishList

WishList 디렉토리에서 아래와 같이 명령어를 입력하여 MyWish의 scaffold를 생성합니다.

$ script/generate scaffold MyWish name:string price:integer url:string memo:text


3. Xcode Organizer
1) WishList 등록
Xcode를 실행하고 메뉴에서 Window/Organizer를 클릭합니다.   
사용자 삽입 이미지

위와 같이 Organizer가 실행되되면 finder에서 위에서 만든 WishList 디렉토리를 좌측의 PROJECTS & SOURCES가 있는 영역으로 드래그하여 가져다 놓습니다. 아래와 같이 PROEJCTS & SOURCES 아래에 WishList가 등록된 것을 확인합니다.
사용자 삽입 이미지
목록에서 소스파일을 선택하면 좌측 편집창에서 수정할 수 있습니다.
사용자 삽입 이미지

2) migration
추가된 WishList를 클릭한 후에 툴바의 Action을 클릭한 채로 있으면 아래와 같이 실행 메뉴가 나옵니다. db:migrate를 선택합니다.

사용자 삽입 이미지

아래와 같이 성공적으로 실행되었다는 메시지창이 출력됩니다.
사용자 삽입 이미지

3) 웹서버 실행
사용자 삽입 이미지
툴바에서 Run을 실행하면 초기 설정창이 오픈됩니다. 좌측의 하단에 [+] 버튼을 클릭하고 좌측과 같이 'New Shell Script'를 선택합니다.





아래와 같이 제목을 'run server'로 변경하고 Directory를 'Top Level Organizer Item'으로 선택합니다. 그리고 Command에 'script/server'를 입력한 후 OK 버튼을 클릭하여 저장합니다.

사용자 삽입 이미지

실행되면 아래와 같이 서버가 3000 포트에서 실행되고 있다는 것을 확인할 수 있습니다.
WEBrick으로 실행될줄 알았는데 친절하게 Mongrel도 이미 설치되어 있는 것 같습니다.
사용자 삽입 이미지

4. 테스트

사파리나 파이어폭스의 주소창에서 'http://localhost:3000/'을 입력하면 아래와 같이 Ruby on Rails의 기본페이지를 확인할 수 있습니다.
사용자 삽입 이미지

이제 다시 주소창에서 http://localhost:3000/my_wishes 를 입력합니다. 목록 하단의 'New my wish'를 클릭하여 아래와 같은 입력폼이 나오면 각 필드를 입력 후에 하단의 'Create' 버튼을 클릭합니다.

사용자 삽입 이미지

목록으로 돌아 오면 아래와 같이 입력한 내용이 등록되어 있음을 확인할 수 있습니다.

사용자 삽입 이미지

터미널에서도 SQLite을 실행하여 테이블과 레코드를 확인할 수 있습니다.

사용자 삽입 이미지

혹시나 RoR을 Xcode를 이용할 수 있는지 알아 보았는데, 제가 아직 방법을 잘 몰라서 그런지 오히려 그냥 터미널에서 개발하는 것 보다 더 불편한 것 같습니다.

짧은 생각으로는 Ruby on Rails + (Prototype + script.aculo.us)가 최상의 웹 개발환경인 것 같은데, 생각 처럼 그렇게 많은 곳에서 사용하지는 않는 것 같습니다. 제가 모르는 어떤 이유가 있는 것 같습니다.