오픈마루에서 진행된 첫번째 데브데이에 대한 내용입니다. 다른 후기들은 여기에서 보실 수 있습니다.
같이 루비 튜토리얼 세션을 진행하신 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
,

루비세미나3회후기

2007. 6. 19. 23:35

6월 16일날 세번째 루비 커뮤니티 세미나가 있었다. (잘정리된 deepblue 님의 블로그) 어랏? 그러고 보니 동생 생일날이네.

이번 세미나의 여파로 미투에 친구도 여럿 생겼다 ^^;;  언제나 커뮤니티를 위해 열심히 하는 deepblue 님이 아니었으면, 이번 5개월 만의 모임이 열리기도 힘들었을 것 같고, 오프라인 모임이 자취를 감추었을 수도 있었는데 어쨌든 다행이다.

워낙 급 제안이 되어서 사람들이 많이 올까 했었는데, 다행이도 많은 분들이 오셨다. 그날 가장 먼저 코디안님이 오셨는데, 역시나 바쁘신 분 답게 앉자마자 노트북을 꺼내놓으시고 마구 뭔가를 작성하신다... (이것이 그날 발표자료 였나? ^^). 부산에서 올라오신 분도 있었는데, 이 대목에서는 약간 미안한 마음마져 들었다. 너무나도 가볍게 마음가짐을 갖고 참석을 한터라서, 시간을 빼앗는건 아닌가? 라고잠시 반성..

갑자기 모이긴 했어도 역시나 많은 준비가 필요 없을 정도로 평소에 갖고 있는 내공들을 유감없이 뿜어내는 모습을 보니, 좀 더 자주 만나지 않으면 3시간은 턱없이 부족한 시간이라는 느낌을 받았다. 얘기하고 싶은 분들이 많았는데, 공지기간이 워날 짧아서, 발표주제를 수집할 수가 없어서, 참석하신 분들에게 기회가 다 돌아가지 못한 것 같았다.

언제나 즐거움과 도움과 지식과 노하우를 전달해주는 분들이 모인 자리라 그런지 유쾌한 느낌이었다. 개인적으로는 지난달에 있었던 루비온레일스실전워크샵 에서 발표했던 자료를 간단하게 소개하는 시간을 가졌는데, 짧게 줄여서 내용은 간략하게 하고 루비 커뮤니티에 참여하신 분들의 고마움을 느끼고 있다는 것을 전달하려고 노력은 했는데, 좀 횡설수설 했던 것 같다. (목도 너무 않좋구. 선생님들은 정말 대단하셔 ㅡㅡ;;)

커뮤니티 사람들이 좀더 원활하게 온라인에서 의사소통을 할 수 있는 공간이 어서 정착되면 좋겠다는 생각이 들었다. (그동안 nohmad님이 계속 개인적으로 운영을 해주시고 계셨는데, 이제는 사람도 점점 많아지고 있으니, 좀더 여러 사람이 운영을 도와줄 수 있는 형태로 되었으면 좋겠다 - 좋은 소식이 조만간 있지 않을까 ^^)

어쨌든 사진도 없고 무료한 후기인데, 루비 커뮤니티가 점점 더 활기찬 공간이 되었으면 좋겠다. 다음 세미나가 또 기다려진다.

P.S. 내용중에 이름이 매치가 안돼서 상세히 언급이 안되었으니 ^^;; 양해바랍니다.

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

,

웹어플리케이션 컨퍼런스

2007. 6. 9. 00:48

사용자 삽입 이미지


사용자 삽입 이미지

WebappsCon 2007 이 아래와 같이 21일날 개최된다. 아래 행사에 대한 소개내용만 봐도 재미난 꺼리들과 사람들이 넘처나는 행사가 될 것 같다. 처음 출발과는 다르게 역시나 생각있으신 분들이 열심히 추진하다보니, 좋은 행사가 되어가는 것 같다. 벌써부터....

행사 페이지 공식 블로그에 올라오는 글 제목만 봐도 상당히 흥미롭다. 
이번에 오픈마루에서도 후원도 하고, 많은 사람들이 Speaker 로 또는 행사요원? 등등으로 행사에 참여하게 되었으니 축제처럼 즐길 수 있는 행사가 될 것 같다.

나도 한번 가보려구 ^^;;;

행사 특색

본 행사는 기존 컨퍼런스 형식을 기반으로 하지만 다양한 웹 비지니스 업계 종사자들이 자원 봉사로 참여하여 만들어 나가는 열린 컨퍼런스를 지향하고 있습니다.

국내 웹 비지니스 업계에 종사하는 사람들로 구성된 웹2.0 워킹 그룹 및 각 분야별 전문가 그룹이 직접 참여하여 웹 어플리케이션 기술의 현재와 미래를 조망해 보는 프로그램을 구성하고 당일 행사 준비를 위해 자원 봉사를 하고 있습니다.


패널 이벤트- 질문하시면 무료 참가!


전길남, 데니스 황 등 전문가 대거 참여


지방 참가자 무료 등록 안내



,