루비 여섯번째 세미나와 발표자료

2008. 9. 2. 16:24

여섯번째 루비 세미나가 지난 토요일 (6.28)에 있었다. 세미나 참여신청 관련 페이지를 보더라도 열기가 사전부터 대단했다는 것을 알 수 있다. 어느새 이렇게 커졌는지 왠지 자식이 커가는 느낌이랄까?

항상 이런 세미나를 하고 나면 가슴속에 무언가 남는 것이 있다. 이번에도 많은 분들이 세미나 준비 및 발표에 많은 기여를 해준 덕분에 훌륭하게 치러진 것 같다. 새로운 분들을 만나서 열정을 전달받고 나니 왠지 나까지 힘이 나는 느낌이다. 현장 내용은 동영상으로 촬영 되었으니 (공식 블로그는 여기) 에서 공유되지 않을까 싶다 - 힘내요 험브롤!

언제나 그렇 듯이 감각적인 발표가 인상적인데 이번에도 짧은 시간이지만 새로운 시도들이 보여서 신선했고, 정말 멋진 스타트업 기업들이 나와서 자신들의 서비스를 자랑스레 소개하는 것을 보면서 많은 에너지를 전달받을 수 있어서 더욱 더 좋았던 것 같다. (파프리카랩, 스토리큐). 왠지 스토리큐는 이제 루비 세미나 공식 프리젠테이션 자료 공유 툴이 되는 분위기 ^^;; 두 회사에서 만드는 서비스는 모두 "레일스" 로 작성되었다.

 

너무나 많은 분들이 고생해 주셔서 다 언급해드리진 못하고 공식 블로그뜨거운루비, 커뮤니티 등에서 다양한 많은 분들의 소식을 접해보면 좋겠다.

 

발표자료 공유

http://www.storyq.net/boxes/show/1204

 

발표 자료라고 하긴 좀 쑥쓰런 면이 있지만, 사실 여기에 나오는 이미지 중에 원치 않으신 분들도 나온다 (사전에 양해 안구하고 썻어요. 쏘리 성관님, 수용님, 세현... 워낙 세 사람이 한꺼번에 나온 사진이 맘에 들어서 이해해 주실~~꺼죠)

 

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

'재미' 카테고리의 다른 글

[iPhone SDK Development] chapter02-ViewControllers  (0) 2008.11.06
My Brain Sex ID  (0) 2008.09.02
업그레이드된 재선 SHOW  (0) 2007.12.31
루비1.9릴리즈-크리스마스선물  (0) 2007.12.31
슬러거의 진화  (0) 2007.12.31
,
오픈마루에서 진행된 첫번째 데브데이에 대한 내용입니다. 다른 후기들은 여기에서 보실 수 있습니다.
같이 루비 튜토리얼 세션을 진행하신 deepblue 님의 후기는 여기에서 보실 수 있습니다.

아래는 루비 튜토리얼 세션에서 진행된 내용 입니다.
튜토리얼1 - [멘토:강문식, 유지만] Ruby반 - 세미나룸#4

- 최종참가자: 10명 - 날개, 김성안, 브루펜시럽, 우주, 트위니, Celeste, Dano, iron, Raven, 이두원


참고자료

링크

문서

소스


셈플 어플리케이션 만들기 (with ActiveResource)

목표 :

ActiveRecord 를 사용하지 않고 ActiveRecord 의 REST 버젼이라고 할 수 있는 ActiveResource 만을 사용해서 스프링노트의 페이지를 다룰 수 있는 게시판을 만들어 본다.


step1 어플리케이션 생성

  1. > rails snote
  2. > cd snote
  3.  

step2 EdgeRails

  1. > svn co http://svn.rubyonrails.org/rails/trunk vendor/rails

Edge Rails 란 레일스 최신 개발소스를 의미함.

(참고) vendor/rails 디렉토리에 최신의 레일스 소스를 내려받으면 Edge 로 개발하는 환경이 갖추어 진다.

  1. vendor/rails/railties/lib/initializer.rb 에 아래와 같은 메소드가 존재.

  2. def framework_root_path

  3.   defined?(::RAILS_FRAMEWORK_ROOT) ? ::RAILS_FRAMEWORK_ROOT : "#{root_path}/vendor/rails"

  4. end

step3 오픈마루 인증센타를 통해서 인증하기

인증키 받기 : 도움말 참조


step3.1 레일스 환경설정 수정

config/springnote.yml 파일 생성후 아래와 같은 정보 추가.

  1. springnote:

  2.   open_id: 자신의오픈아이디

  3.   user_key: 인증센타를통해받은유저키

  4.   app_key: 인증센타를통해받은어플리케이션키

step4 Scaffold 를 이용해서 모델, 컨트롤러, 뷰 생성

  1. > script/generate scaffold page title:string source:text

step5 ActiveRecord 를 사용하지 않도록 설정 / 패치

step5.1 config/environment.rb 파일 수정

ActiveRecord 를 사용하지 않도록 설정

  1. config.frameworks -= [ :active_record ]

필수 세션 정의 필요

  1. config.action_controller.session = {
           :session_key => "_board_session",
           :secret => "some secret phrase"
    }

스프링노트 API 인증에 필요한 설정 파일 내용 로딩 (springnote.yml)

  1. CONFIG = YAML::load_file("#{RAILS_ROOT}/config/springnote.yml")

(참고 : 개발환경에서 상세하게 에러메시지를 남기도록 설정) : config/environmants/development.rb 파일내용중 아래와 같이 수정

  1. config.whiny_nils = false # 원래는 true

step6 Monkey Patch

lib/initializer.rb 작성

  1. module Rails
      class Initializer
       # Thanks to http://dev.rubyonrails.org/ticket/6795
       def load_observers
         return unless configuration.frameworks.include?(:active_record)
         ActiveRecord::Base.instantiate_observers
       end
      end
    end

config/environment.rb 파일에 monkey_patch 한 라이브러리 파일 로딩하도록 수정

  1. require 'lib/initializer.rb'

step7 컨트롤러 수정 (app/controller/pages_controller.rb)

  1. class PagesController < ApplicationController
      before_filter :update_site

  2. ......

  3.   private
  4.   def update_site
  5.     user_id = CGI.escape(CONFIG['springnote']['open_id'])
  6.     password = [ CONFIG['springnote']['user_key'], CONFIG['springnote']['app_key'] ].join(".")
  7.     Page.site = "http://#{user_id}:#{password}@api.springnote.com/"
  8.   end

step8 모델 수정 (app/model/page.rb)

  1. class Page < ActiveResource::Base
      set_primary_key 'identifier'

      def to_param
       identifier.to_s
      end
    end

step9 뷰 수정 (app/views/pages/show.html.erb)

  1. <p>
  2.   <b>Title:</b>
  3.   <%=h @page.title %>
  4. </p>
  5. <p>
  6.   <b>Source:</b>
  7.   <%=h @page.source %>
  8. </p>
  9. <p>
  10. <%=@page.source %>
  11. </p>
  12. <%= link_to 'Edit', edit_page_path(@page) %> |
  13. <%= link_to 'Back', pages_path %>

step10 업데이트 오류 해결

app/conteollers/page_controller.rb 에서 update 부분을 수정하면 됨.
     # ActiveResource 에는 update_attributes 가 구현이 안되어있다. 때문에 아래와 같이 수정하고 명시적으로 save 를 호출해주면 됨.

  1.   def update

  2.     @page = Page.find(params[:id])

  3.     respond_to do |format|

  4.       params[:page][:identifier] = params[:id]

  5.       if @page.attributes = params[:page]

  6.         @page.save

  7.         flash[:notice] = 'Page was successfully updated.'

  8.         format.html { redirect_to(@page) }

  9.         format.xml  { head :ok }

  10.       else

  11.         format.html { render :action => "edit" }

  12.         format.xml  { render :xml => @page.errors, :status => :unprocessable_entity }

  13.       end

  14.     end

  15.   end


기타 : 레일스 콘솔 사용 관련

개발환경 레일스 콘솔 실행 : script/console


콘솔상에서 아래와 같이 한줄씩 입력해보고 나오는 결과를 참고해보자.


  1. >> app.class
    >> app.get "/pages/페이지번호"
    >> app.get "/pages"
    >> app.response.body
    >> app.cookies
    >> helper.text_field_tag :foo
  2. >> app.methods.grep(/_path$/).sort
  3. >> _    (마지막 아웃풋을 보여줌)
  4. >> y _

기타2 : 엑티브리소스 참고

오류코드

200 - 399:: Valid response, no exception
404:: ActiveResource::ResourceNotFound
409:: ActiveResource::ResourceConflict
422:: ActiveResource::ResourceInvalid (rescued by save as validation errors)
401 - 499:: ActiveResource::ClientError
500 - 599:: ActiveResource::ServerError

Table 1.1: HTTP Verbs and REST-URLs
HTTP Verb REST-URL Action URL without REST
GET /projects/1 show GET /projects/show/1
DELETE /projects/1 destroy GET /projects/destroy/1
PUT /projects/1 update POST /projects/update/1
POST /projects create POST /projects/create

Table 1.2: Standard Path methods
Path Method HTTP Verb Path Requested Action
projects_path GET /projects index
projects_path(1) GET /projects/1 show
new_project_path GET /projects/new new
edit_project_path GET /projects/1;edit edit
projects_path POST /projects create
projects_path(1) PUT /projects/1 update
projects_path(1) DELETE /projects/1 destroy
REST Routing

config/routes.rb :

  1. map.resources :projects

map.resources :projects

Route Generated Helper
projects projects_url, projects_path
project project_url(id), project_path(id)
new_project new_project_url, new_project_path
edit_project edit_project_url(id), edit_

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


'재미' 카테고리의 다른 글

스프링노트 UI 개선 릴리즈  (4) 2007.07.09
웹 얼굴 분석 ~~  (1) 2007.07.05
루비세미나3회후기  (0) 2007.06.19
Railscasts (no1 ~ no5) : 레일즈 스크린캐스트  (0) 2007.03.28
Web-based IDE and debugger for Rails  (0) 2007.02.14
,