Ruby On Rails/작은 팁2012/03/16 20:44
제목이 이상한것 같지만, 아래 코드를 보자

brew를 실행하면, 되긴 하는데..
정작 설치를 하거나 업그레이드를 할려고 하면 권한 문제로 실행이 안된다.

나의 경우에는 맥북에서 아이맥으로 마이그레이션을 했는데, 그래서 생긴 문제인 듯 하다.

/usr/local에서 파일 오너가 root로 되어있다.

이걸 전부 내 계정으로 변경해주었다.


sudo chown -R hiphapis:wheel /usr/local



그리고 나서 업그레이드를 하니 잘 된다.


 


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Johan Kim hiphapis

TRACKBACK http://hiphapis.net/trackback/200 관련글 쓰기

댓글을 달아 주세요

Ruby On Rails/작은 팁2011/07/12 11:37
RoR에서 Terminal을 사용하기 때문에 이 카테고리에 넣습니다.
양해를 쿨럭~;

Mac Terminal의 Home, End키의 기본 세팅이 스크롤 최상단/최하단 (좀 더 정확하게 말하면 버퍼의 최상단/최하단)으로 이동이 됩니다.
하지만 일반적인 상황에선 현재 줄의 처음과 끝으로 가는 용도로 많이 사용하죠. 
(여기서 OSX에 불만 하나.. 왜 프로그램마다 Home, End 동작이 틀리냐고.. Home, End만 틀린게 아님. 틀린키 무지 많음.)

평상시에는 그냥 그러려니 하고 별 문제 없이 쓰지만, 막상 필요한 순간이 오면 참 짜증이 나는.. 뭐 그런 기능입니다.

아래 Terminal에서 Home, End키 적용하는 법입니다. 

1. Preferences를 엽니다.


2. 그런후 사용하시는 스킨의 Keyboard로 이동 합니다. 
3. Home을 선택, Edit을 누릅니다.


4. Action을 "Send string to shell"로 선택하시고, \033[1~를 입력후 OK
\033[1~는 복사해서 붙여넣으세요.


5. 마찬가지로 end를 선택 하신 후 Edit


6. 이번에는 \033[4~를 입력


끝입니다.

혹시 PageUp/Down을 원하신다면, 마찬가지 방법으로
PageUp: \033[5~
PageDown: \033[6~ 

를 입력하시면 됩니다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Johan Kim hiphapis

TRACKBACK http://hiphapis.net/trackback/196 관련글 쓰기

  1. [RoR] 맥 OS X에 rvm을 이용해 ruby on rails 개발 환경 구축하기  삭제

    2011/10/30 18:39TRACKBACK FROM 월풍도원(月風道院) - Delight on the Simple Life

    맥에서 rvm(Ruby Version Manager)를 이용한 ruby on rails 개발 환경 구축 방법입니다.맥 OS X에 rvm을 이용해 ruby on rails 개발 환경 구축하기맥 OS X에서 루비 설치하기우선 터미널에서 아래의 커멘드를 이용해 RVM(Ruby Version Manager)을 설치합니다.$ bash < <(curl -s...

댓글을 달아 주세요

  1. 지나가다

    저는 이게 전혀 먹질 않네요. ㅠ ㅠ 라이언이라서 그런가

    2011/10/27 16:05 [ ADDR : EDIT/ DEL : REPLY ]
  2. 이거 검색하다가 이리 흘러들어왔네요. ㅋㅋ

    저도 라이언이어서 적어주신 대로 할 때 안되더라구요. 그런데 다른 키들 보다보니 원래 shift home, shift end가 원하는 기능이어서 해당 단축키 참고하여 수정했더니 잘 되네요.
    home: \\033[H
    end: \\033[F

    2011/12/30 11:10 [ ADDR : EDIT/ DEL : REPLY ]
    • 헐퀴~ 그렇군요.
      이거 쓸때가 스노우때였으니..

      라이온 설치하고 부터 저도 안되긴 했는데..
      귀찮아서 그냥 썼었거든요.

      덕분에 거저 했네요 ㅋㅋ

      2012/01/02 15:34 [ ADDR : EDIT/ DEL ]
  3. 본 세팅이 스크롤 최상, End키의 기본 세팅이 스크롤 최경 구축하기맥 OS X에서 루비 설치하기우선 상단/최하단 (좀 더 정확하게 말하면 버퍼의

    2012/05/05 19:11 [ ADDR : EDIT/ DEL : REPLY ]

Ruby On Rails/작은 팁2011/06/15 13:20
내용추가.
이리저리 좀 더 상황을 지켜보니.. 
Devise의 문제가 아니라 Ruby 1.9.2 or Rails 3.1 의 버그인것 같다.
path를 못찾는 경우 에러를 내지 않고, 끝까지 찾는다. 끝까지!

------------
 
Devise를 붙이고 sign_out을 했는데 반응이 없다.
그러다가 몇초 후 내 맥도 반응이 없다.
Activity Monitor를 띄워보니, ruby 메모리 사용이 1.8G
응? 
1.8G?

내눈을 의심하고 다시 봤는데 1.8G
가운데 .(점)만 빼면 욕이 되는 1.8G.. 
ㅡ.,ㅡ;


처음에는 84MB


sign_out누르니깐 몇초만에 1GB 돌파!!!

그대로 내비두면 4GB 메모리를 다 잡수실 기세라서 1GB넘는 시점에서 강제종료 해버렸다.


뭐가 문제인지 이리저리 추적을 해보니..
destroy 액션(sign_out)에서 

sign_out_and_redirect

요 녀석이 의심스러워 이리저리 해보니, 역시나 이 녀석이 범인이었다.

문제는 redirect시 :root_path로 redirect하게 될 때가 있는데, 이때 :root_path를 찾지 못해 생기는 버그였다.
해결책은 크게 2가지가 있다.

1. :root_path를 만들어 주는 방법.
:root_path가 없어서 생기는 버그임으로, :root_path를 만들어 주면 된다.
routes.rb에 가서 주석처리된 

# root :to => 'welcome#index'

을 주석을 풀어주고, :to는 각자의 상황에 맞게 수정을 해주면 된다.

root :to => 'getAway#Hi'



2. sign_out과 redirect를 따로따로.

sign_out_and_redirect

이 녀석이 하자다보니, 이 녀석을 안써버리면 그만이다.
직접 sign_out 시키고 상황에 맞게 redirect 하면 된다.

sign_out
redirect_to "넌 이미 아웃되었다."



크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Johan Kim hiphapis

TRACKBACK http://hiphapis.net/trackback/195 관련글 쓰기

댓글을 달아 주세요

  1. 안녕하세요.
    저는 root :to => "home#index"가 기본으로 풀려있어서 그런지,
    아직 루비 devise 때문에 컴퓨터가 기절한적은 없습니다.
    트랙백 걸려고 검색 하다 들어와서, 루비온 레일즈 관련 포스트 잘 읽고 가네요..:D
    행복한 하루 되세요!

    2011/10/30 18:51 [ ADDR : EDIT/ DEL : REPLY ]
  2. 공부를 시작한지 얼마안된 초보인데,이렇게 많고 좋은 자료를
    공유할수 있게 해주셔서 정말 감사드립니다..^^

    2012/04/26 23:26 [ ADDR : EDIT/ DEL : REPLY ]

Ruby On Rails/작은 팁2011/06/13 15:00


작업을 하다보면 종종 불필요한 prefix가 붙는 경우가 생긴다.

resources :article do
  resources :article_log
end

resources :log


사실 큰 문제는 없지만, article_log path을 적어줘야 할때

article_article_log_path

이런 요상한(?) naming을 가진 path가 되어버린다.

나 같이 깔끔한 사람(응?)은 이런거 눈뜨고 못본다.
난 무슨 일이 있어도

article_log_path

이렇게 쓰고 싶어 근질할테니 말이다.
당신도 그런가? 
동지! 함께 원피스를 찾자!(응?)

이런 경우

:as 

를 써주면 우리가 원하는(설마 나만 원하는건 아니겠지?) 형태로 사용할 수 있게 된다.

resources :article do
  resources :article_log, :as => :log
end

resources :log


이렇게 :as를 추가해주게 되면

article_article_log_path

가 아닌

article_log_path

로 path가 잡히게 된다.
못믿겠으면 

rake routes

해보라!


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Johan Kim hiphapis

TRACKBACK http://hiphapis.net/trackback/194 관련글 쓰기

댓글을 달아 주세요

Ruby On Rails/작은 팁2011/05/19 11:11


아시다시피 5월 5일 Rails 3.1 Beta 1 이 Release되었다.
많은것들이 바뀌었는데 그것들중 알고 넘어가면 좋을법한것 몇가지만 추려 간략하게 Overview해보았다.

설치

rvm 1.9.2@railspre --create
gem install rails --pre

Javascript

Rails 3.1부터 prototype.js가 아닌 jQueryCoffeeScript가  Default로 탑재되어 있다.
만약 jQuery가 아닌 prototype.js를 계속 사용하고자 할 경우,
rails new [APP_NAME] -j prototype
해주면 된다.

새로 추가된 Gems

  • sass: haml에 포함되어 있던 sass가 독립되어 나왔다.
  • coffee-script
  • uglifier: JS를 하나의 파일로 합쳐준다.
  • jquery-rails 

디렉토리 구조 변경

Public아래에 있던 Javascript, Stylesheets, Images가
/app/assets/ 로 이동되었다.
그러므로 웹엔진(Nginx등)에서 Js, Css, Image를 Rails한테 안넘기고 직접 처리하도록 세팅이 되어 있었다면, 관련 부분은 수정이 있어야 한다

Sprockets

application.css, application.js에 보면
 //= require jquery
처럼 주석처리된 require들이 있는데, 이건 주석이 아니라 sprockets의 require(include)하는 문법이므로 해당 구문을 삭제하면 include가 안된다.
 

Migration 

migration file의 change 메소드가 추가되었다. 
과거에는 up, down으로 메소드가 분리되어 있었지만, change로 통합되었다.
하지만 종종 제대로 동작하지 않을때도 있는데 그럴땐 up, down을 만들어서 사용하면 된다. 

그리고 :belongs_to가 추가되었는데, 과거 relationship을 같게 될 경우 직접 index key(article_id:integer)를 만들어 줬었다.
3.1 에서는 belongs_to를 이용하면 되는데.
rails g scaffold comment article:belongs_to body:text

이렇게 써주면되며, belongs_to로 만들면 add_index도 시켜준다.

Console

콘솔에서 DB Query가 노출이 되었는데.. 상황에 따라선 이게 과잉친절이 될 수 도 있을 듯 하다. 

Active Record

  • :has_many에서 :through를 다중깊이까지 사용할 수 있게 되었다. 
  • 그리고 :through에서 :dependent 도 지원을 한다.
  • :as 가 추가되었다.  
  • default_scope가 block으로 처리할 수 잇게 되었으며 lambda, method를 사용할 수 있다.

    default_scope { ... }
    default_scope lambda { ... }
    default_scope method(:foo)

  • update_column이 추가되었는데, update_attribute와 동작은 유사하지만 validation과 callback을 무시하고 update한다.

    User.first.update_column(:name, "sebastian") 

  • inverse_of가 추가되어서 예제 코드처럼 post.tags.build가 가능하다.

    class Post < ActiveRecord::Base
      has_many :taggings
      has_many :tags, :through => :taggings
    end

    class Tagging < ActiveRecord::Base
      belongs_to :post
      belongs_to :tag, :inverse_of => :tagging # :inverse_of must be set!
    end

    class Tag < ActiveRecord::Base
      has_many :taggings
      has_many :posts, :through => :taggings
    end

    post = Post.first
    tag = post.tags.build :name => "ruby"
    tag.save # will save a Taggable linking to the post

  • has_many의 :conditions에서 sql을 직접 쓰는것의 사용법이 바뀌었다.
    // Before
    has_many :things, :conditions => 'foo = #{bar}'

    // After
    has_many :things, :conditions => proc { "foo = #{bar}" }
  • has_secure_password라는 메소드가 추가가 되었는데, Authentication을 직접 만들어서 쓸 경우 아주 유용하게 사용할 수 있다.
    새삼스럽지만, 3.1되면서 부터 Authentication Tool은 안써도 될 듯 하다.


Action Pack 

  • auto_link가 제거되었다. 만약 계속 사용할것이라면 rails_autolink gem을 이용하면 된다.
  • :authenticity_token 을 form_tag에서 option으로 바뀌었다. 생략하거나 수정이 가능하다.
  • rhtml, rxml이 제거되었다.
  • csft_meta_tag가 복수로 rename되었다. csft_meta_tags
  • HTML5의 "data" attribute를 hash로 제공한다
    tag("div", :data => {:name => 'Johan Kim', :city_state => %w(Seoul)})


Active Support

  • Object#in?
  • weeks_ago
  • pre_week


간략하게 이 정도 인 것 같다.
관심이 있다면 https://gist.github.com/958283 를 확인하면 자세한 내역이 나온다.

http://menonrails.com/articles/14 에 기고된 포스팅 입니다.


참고링크



 

 
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Johan Kim hiphapis

TRACKBACK http://hiphapis.net/trackback/192 관련글 쓰기

댓글을 달아 주세요

  1. 카테고리의 다른 글

    2012/05/04 20:28 [ ADDR : EDIT/ DEL : REPLY ]
  2. 구문 게시물에 그런 것들을 제공하는 아주 좋아요 방법입니다. 클리어 컷 의미.

    2012/05/20 18:58 [ ADDR : EDIT/ DEL : REPLY ]

Ruby On Rails/작은 팁2011/05/02 20:00

Edit+ 짱!

Windows에서 개발을 할때는 무조건 Edit+만 사용했었다. (PHP뿐만 아니라 RoR할때 조차도!)

그 이유는
  • 10년 넘게 사용해왔다는 점.
  • 정식 라이센스를 보유하고 있다는 점.
  • 베타 테스터라는 이유. (개발자와 100통이 넘는 메일을 주고 받았다.)
도 있었지만,

  • 10년 가까이 사용해오다보니 왠만한 단축키는 거의 다 외우고 있었고
  • 직접 단축키를 할당하는 등의 커스터마이징도 많이 되어 있었고
  • 무엇보다 막강한 편집기능 때문이었다.

막강한 편집기능의 간략한 예를들면..
  • 주석 추가/제거
  • 현재 케럿에서 앞/뒤로 줄 삭제
  • 현재 줄 복사/삭제
  • 현재 줄을 위/아래로 이동
  • 현재 단어 삭제
  • 캐럿기준 앞뒤 문자 바꾸기
    이것 정말 쏠쏠한 기능이다. 고속으로 타이핑 하다보면 철자의 앞뒤를 바꾸는 경우가 있는데 이 기능을 실행하면 앞뒤 문자를 바꿔준다. 예를들어 form인데 from으로 쳤다고 하자. o와 r 사이에 캐럿을 놓고 Ctr+T(단축키는 정확히 기억이..) 누르면 form으로 짠!
등등등 Edit+ 편집메뉴에 있는 모든 기능을 능수능란하게 사용하다 보니 RoR을 할때도 Textmate보다 Edit+로 하는게 비교도 안되게 빨랐다.
(개발툴을 능숙하게 사용하는것도 개발자의 능력임을 잊지말자!)

그러다 몇년전 OSX로 넘어오면서 어쩔 수 없이 Textmate로 넘어왔는데, 이건 뭐 도저히 작업속도가 안나오는 것이다.

뭐 Textmate도 그럭저럭..


사람들이 Textmate에 훅~가는 멋진 기능중 하나가 바로 "코드 자동완성"인데.. 사실 이거 Edit+에도 있다.
사실 Textmate가 좀 더 미려하고, Smart한것은 인정! 하지만 개발속도에 영향을 줄 정도는 아니다.

어쩌다 보디 Edit+ 찬양글이 되어가고 있는데, 10년을 쓴 Edit+인데 Textmate가 성에 안차는걸 어떻하랴..

돌아와서, Textmate의 막강한 기능이 바로 커스터마이징이다. 내가 필요한 기능이 있으면 만들어서 추가해버리면 된다. 물런 Edit+도 가능하지만 한계가 명확하다.
Textmate가 제공하는 기본 편집기능도 Edit+만큼은 아니지만 나름 괜찮은 기능들을 제공한다.
다만 Text Bundle에 숨겨져 있다는게 문제.

그러므로 Textmate로 개발을 해야 하는 개발자라면 시간을 투자해서 Text Bundle과 자기가 사용하는 Language의 Bundle을 처음부터 끝까지 여러번 살펴보는것을 권장한다.
(다시한번 말하지만, 개발툴을 능숙하게 사용하는것도 개발자의 능력임을 잊지말자!)
 

Bundle의 단축키를 수정할 수 있으므로 자주 쓸법한 녀석은 단축키를 지정해 놓는것이 편하다. 
이런것중 유용한것 하나가 "줄 끝 공백 제거"같은 기능이 있는데.. 단축키가 할당되어 있지 않다.
필자의 경우 ⌃. 으로 단축키를 할당해서 쓰고 있다.

단축키가 이미 꽉 차 있거나, 단축키가 너무 많거나 혹은 휴먼 메모리가 딸려서 외우지 못할경우 Bundle Item ⌃⌘T (Bundles → Select Bundle Item)을 찾아서 실행하면 된다.



Textmate 편집 단축키

필자가 자주 애용하는 편집 기능은
  • ⌥⌘.(마침표): HTML 안닫힌 태그 있으면, 닫힌 태그 입력
  • ⌃⇧,(쉼표): HTML 태그 생성
  • ⌃⇧.(마침표): Language의 시작, 출력, 주석 등등 (Bundle에 따라 틀림)
  • ⌘/: 주석 추가,제거
  • ⌃W: 단어 선택
  • ⌃⇧K: 줄 삭제
  • ⌃⇧D: 줄 복사
  • ⌃⌘↑↓: 줄 이동
  • ⌘F: 검색
  • ⌘G: 다음 검색
  • ⇧⌘G: 이전 검색
  • ⌃⌘F: 모두 변환
  • ⌥⌘F: 변환하고 찾기

Bundle에 있는 기능도 있고, Edit 메뉴등에 있는 기능도 있다.
막상 써보니 그리 많지는 않은데 빼먹은것들이 꽤 있을듯한다. 누락된것은 생각이 나거나 새로 발견하는 것들은 계속 추가할 예정이다.

URL


ps. 여러분이 사용하시는것 있으면 우리 공유해요~
코멘트로 써 주시면 올리신 분 아이디와 함께 단축키 목록에 추가할게요! 
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Johan Kim hiphapis

TRACKBACK http://hiphapis.net/trackback/191 관련글 쓰기

댓글을 달아 주세요

Ruby On Rails/작은 팁2011/02/01 10:04
devise는 restful-authentication과 유사한 놈이라고 생각하면 된다.
readme에 약간의 레퍼런스가 제공되며 github의 wiki에 예제들이 제공되고 있다.
물런 rdoc도 있다.

1. devise Gem Download & Install
Gemfile
gem 'devise', '1.1.3'
Rails 2 사용자는 Rails 2용 최신 Version을 찾아서 넣어주면 되고, Rails 3유저라면 구지 버전을 적어줄 필요는 없다.
bundle install


2. devise Install
rails g devise:install
딸랑 2개의 파일만 만든다.
config/initializers/devise.rb
config/locales/devise.en.yml
devise:install를 해줘야 generator가 추가가 된다.

environment/development.rb
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
추가


3. devise Initialize
rails g devise User
User Model과 Migration을 생성하고 Routes.rb파일에 관련 route가 추가된다.


4. Ready
user.rb에 들어가보면 
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
이 기본적으로 적혀져 있고
# :token_authenticatable, :confirmable, :lockable and :timeoutable
들은 제외되어 있다.
만약 제외되어 있는 이 옵션들을 사용하고 싶다면 migration파일(create_user)
의 해당 옵션들 주석도 제거를 해주어야 한다.

각 옵션들에 대한 설명은 README에 있다. 
해석은 알아서..
  • Database Authenticatable: encrypts and stores a password in the database to validate the authenticity of anuser while signing in. The authentication can be done both through POST requests or HTTP Basic Authentication.
  • Token Authenticatable: signs in a user based on an authentication token (also known as "single access token"). The token can be given both through query string or HTTP Basic Authentication.
  • Omniauthable: adds Omniauth (github.com/intridea/omniauth) support;
  • Confirmable: sends emails with confirmation instructions and verifies whether an account is already confirmed during sign in.
  • Recoverable: resets the user password and sends reset instructions.
  • Registerable: handles signing up users through a registration process, also allowing them to edit and destroy their account.
  • Rememberable: manages generating and clearing a token for remembering the user from a saved cookie.
  • Trackable: tracks sign in count, timestamps and IP address.
  • Timeoutable: expires sessions that have no activity in a specified period of time.
  • Validatable: provides validations of email and password. It’s optional and can be customized, so you’re able to define your own validations.
  • Lockable: locks an account after a specified number of failed sign-in attempts. Can unlock via email or after a specified time period.
  • Encryptable: adds support of other authentication mechanisms besides the built-in Bcrypt (the default).

모든 설정이 완료가 되면 상큼한 마음으로 rake
rake db:migrate


5. Setting
migration까지 했으니, 비로서 사용이 가능하다.
하지만 입맛에 맞게 사용할려면 수정 작업이 필요하다.
각종 url이 [:model_name]/sign_in 형식이라 초기 로그인 url이 users/sign_in임으로 관련된 views도 수정을 해주어야 한다.

5.1 Routes.rb
  devise_for :users do
    get 'signin' => 'devise/sessions#new'
    post 'signin' => 'devise/sessions#create'
    get 'signout' => 'devise/sessions#destroy'
    
    get 'signup' => 'devise/registrations#new'
    post 'signup' => 'devise/registrations#create'
  end
여기서 단점은 devise가 기본적으로 사용하는 path들을 overwrite할 수 없으므로, 모든 view파일에 가서 path를 수정해줘야 한다.
예를들어 로그인같으면
<%= link_to new_user_session_path%>
<%= link_to signin_path%>
로 일일이 하나하나 찾아서 수정을 해줘야 하는것이다.

물런 안해줘도 그만. 
하지만 난 url 하나하나에 의미를 부여하고 목숨같이(는 아니지만..) 여기기 때문에, url 구조는 절대 포기할 수 없다.
이것역시 중요한 사용자 경험이라 생각하기 때문에!!

암튼, 중요한 사용자 경험때문에 코드를 전부 수정하는 삽질을 할것이냐?
다행스럽게도 해결책이 존재한다.
  devise_for :users
  devise_scope :user do
    get 'signin' => 'devise/sessions#new', :as => :new_user_session
    post 'signin' => 'devise/sessions#create', :as => :user_session
    get 'signout' => 'devise/sessions#destroy', :as => :destroy_user_session
    
    get 'signup' => 'devise/registrations#new', :as => :new_user_registration
    post 'signup' => 'devise/registrations#create', :as => :user_registration
  end
이런식으로 overwrite를 하는것이다. 뭐 일종의 꽁수이다.

5.2 password length
devise의 자체적인 설정같은 경우는 /config/initializers/devise.rb 에 거의 다 있으며, password lenth또한 마찬가지로 이곳에 있다.
config.password_length = 6..20

5.3 Views
gem에서 View 파일을 불러오는 형태여서, 프로젝트 디렉토리에 파일이 존재하지 않는다.
rails g devise:views users
해주면 /app/views/users 에 각종 view 파일들이 생기게 되고,

/config/initializers/devise.rb
config.scoped_views = true
해주면 gem에서 views를 땡겨오는게 아니라, 프로젝트 디렉토리에 있는 views를 사용하게 되므로, 입맛에 맛게 수정하면 된다.

5.4 login id
로그인을 email이 아닌 id로 받을려면 몇가지 수정 작업을 해주어야 한다.
devise는 email 정보만 받고 있으므로, user에 login_id를 추가해줘야 한다.
여기서는 field명을 name으로 하겠다.
rails generate migration add_name_to_users name:string
rake db:migrate

추가해준 name을 model에 등록 한다.
user.rb
attr_accessible :name

그리고 devise에 로그인시 email이 아닌 name을 사용할것이라고 알려줘야 한다.
/config/initializers/devise.rb
config.authentication_keys = [ :name ]
authentication_keys를 :name으로 등록을 해준다.

마지막으로 login form(in views)에 email이 아닌 name으로 id입력을 받도록 수정해주면 된다.

5.5 controller customized (after signup)
얼마전 찾아보니, 1.2.rc에 이 기능이 추가되었다고 한다. https://github.com/plataformatec/devise/wiki/How-To:-Redirect-after-registration-(sign-up)
아래 쓴 내용은 이제 필요 없을듯. 

더보기


6. Usage
6.1 restful-authentication에서 login_reqired와 같은 역활을 하는 authenticate_user!
before_filter :authenticate_user!

6.2 로그인 여부
user_signed_in?

6.3 현재 유저
current_user

6.4 session route path_name
(#action_name)user_session

6.5 Sample
<% if user_signed_in? %>
  <%= link_to('Logout', destroy_user_session_path) %>        
<% else %>
  <%= link_to('Login', new_user_session_path)  %>  
<% end %>
<br />
  User: 
  <% if current_user %>
    <%= current_user.email %>
  <% else %>
    (not logged in)
  <% end %>
</li>
restful-authentication의 _user_bar 같은 녀석이 과거에는 menu라는 디렉토리에 제공이 되었었는데, 버전업이 되면서 사라졌나보다. 해당 코드는 아래 링크서 확인할 수 있으므로 Copy&Paste해서 쓸 사람은 쓰면 될듯.


7. Conclusion
7.1 장점
devise코드는 다 감추어져있어, 프로젝트에서 코드와 파일이 깔끔해진다.
필요한 부분만 customizing이 가능하다.

7.2 단점
controller를 customizing할때는 직접 파일을 만들어서 해야 한다.
customize할려면 restful-authentication보다 손이 많이 간다.

7.3 총평 
일반적인 유저 시스템이라면 아주 유익하지만,
로그인 및 회원가입 프로세스상 수정이 필요할 경우, 이를 customize하는게 좀 불편할 수 있음.


8. 참조 URL

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Johan Kim hiphapis

TRACKBACK http://hiphapis.net/trackback/181 관련글 쓰기

댓글을 달아 주세요

Ruby On Rails/작은 팁2011/01/28 14:49
한동안 IPhone, IPad, Android 개발하다가, 잠들어 있던 개인프로젝트를 다시 시작할려고 맘을 먹었다.
Rails2 기반이어서, 깔끔하게 새로 만들자는 마음으로 Rails3를 설치를 했다.

Rails3로 넘어가면서 어떤것들이 바뀌었나 찾아보고 Railscasts도 보면서 틈틈이 학습을 해놓았지만..
역시 난관은 있었다.
내가 부닥쳤던 난관들을 정리해서 올리면, 어떤분은(한분이라도..) 도움을 받으시지 않을까 하는 소박한 희망에 몇자 끄적여본다.

이상하다. 문명히 예전에는 plugin install하고 script/generator 로 initialize를 했었는데..
Could not find generator authentiaceted.
이리저리 찾아봐도 별다른 말은 없고 technoweenie의 restful-authentication이 아닌 satin의 restful-authentication만 딸랑 링크가 걸려있다.
Sation의 restful-authentication의 install 설명을 봐도, 내가 한것과 틀린것이 없다.
아 뭐지 -ㅅ-;;
그러던 찰라
"아. technoweenie가 아직 Rails3 버전을 안맞들었고, Sation은 작업을 해놓은건가?" 라는 의문이 생기고..
Sation걸로 install을 하고 initialize하니 잘 된다.

하지만 막상 사용할려고 하면
uninitialized constant ApplicationController::AuthenticatedSystem
라고 한다. 
include AuthenticatedSystem
require File.join(Rails.root, 'lib', 'authenticated_system.rb')
로 바꿔주니깐 되긴 하는데, lib아래 있는 모든 파일을 이렇게 불러올 수 는 없는 노릇.
뭔가 더 스마트한 방법이 있을것 같긴한데.. Railscasts에서 이 내용을 본것같아 이리저리 뒤져봐도 못찾고.
결국 구글링으로 알아냈다.

application.rb 에다가
config.autoload_paths << File.join(config.root, "lib")
해주면 된다.

2. haml
예전에는 gem으로 설치하고, 그 후에 plugin install을 해줬어야 했다.
난 당연히 plugin install을 했는데, 왠걸 initialize가 제대로 안된다.
vendor/plugin/haml보니 init.rb은 있는데 0 bytes고..
haml을 initialize하면 생기는 파일은 init.rb 딸랑 하나인데, 이 녀석이 하는 일은 haml gem을 불러오는것 뿐이다.

그런데.....
Rails3부터 bundler가 추가되면서 Gemfile이라는게 생겼다, init.rb가 존재해야 할 명분이 사라져 버린것이다.
init.rb가 하던일을 Gemfile에 gem 'haml' 적어주면 끝나니 말이다.

Gemfile에
gem 'haml'
을 적어주고,
$user> bundle install
하면 끝.

3. Routes => :path_prefix
내가 작업했던 수없이 많은 개인 프로젝트(오픈한것은 NA;;)들의 Routes에는 :path_prefix가 꼭 사용되었었다.
근데, Rails 3로 오면서 이녀석 Deprecated.....;;
혹시나 하는 마음에
scope ":user_login" do
해봤는데 안된다. 
혹시나 하는 마음에 한번더 시도를 해보았는데
scope "(/:user_login)" do
이렇게 하니 된다. 
예전에는 resources 하나하나 모두 :path_prefix를 적어주어야 하는 번거로움이 있었는데
이와 같은 방식으로 변해서, 보다 깔끔하게 코드를 작성할 수 있게 되었다.



ps. 작업하다 추가되는것들은 모아놨다가 또 포스팅할 계획임.
ps2. 한국루비사용자모임도 죽은지 오래.. 살아있는 Ruby Forum이 없는것 같은데.. 하나 만들까 -ㅅ-;
도메인은 사놓은게 있긴 한데..
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Johan Kim hiphapis

TRACKBACK http://hiphapis.net/trackback/180 관련글 쓰기

댓글을 달아 주세요

  1. 루비레일스 개발자

    오픈하신다면 저도 동참하고 싶네요!!

    요즘 JSP가 난무하는 세상에서 Rails를 좀더 알리고 싶네요.
    이제 6개월째 입문해서 잘 쓰고 있는데,
    여러가지 정보를 공유해보고 싶네요.

    Ruby on Rails의 경우엔 정말 국내엔 거의 없어서 정보 얻기가 힘들었는데..
    이런게 하나 있다면 저도 적극 동참해보고 싶습니다.

    2011/09/12 20:35 [ ADDR : EDIT/ DEL : REPLY ]
  2. 레일스 입문자

    정말 생겼으면 좋겠습니다. ㅠ.ㅠ 레일스.. 한땐 붐이 일었었는데 왜 이렇게 침체기에 빠져버린 걸까요..? 루비 자체가 상당히 훌륭하고 발전가능성이 큰 언어라 생각하는데... 슬프네요..

    2011/09/30 15:22 [ ADDR : EDIT/ DEL : REPLY ]

Ruby On Rails/작은 팁2009/09/14 20:50
이 문제들을 해결하느라 하루를 허비했네요.

간단정리
  1. Install "Xcode.mpkg"(snow leopard)
  2. data backup
  3. install MySQL 64bit
  4. gem install mysql for 64bit
  5. port update
  6. other gems re-install


Install Snow Leopard
일반설치를 하시면 안됩니다. 꼭 "선택설치(Optional Installs)"를 클릭하신 후 "Xcode.mpkg"를 설치하셔야 합니다. 
"Xcode.mpkg" 클릭 후 설치과정에서 옵션들을 선택하는 페이지가 있는데 그대로 설치를 하시면 됩니다.
snow leopard => 선택설치 => Xcode.mpkg

여담. 저는 Xcode.mpkg로 설치를 안했어서.. 이것 때문에 한참 고생했습니다.

MySQL
Snow Leopard가 되면서 64bit로 Upgrade를 해야됩니다. 즉 재설치를 해야 한다는 말인데, 이렇게 되면 기존의 data들이 뿅~* 하고 날라갑니다. 그러므로 필요한 data들은 backup을 하세요.
mysqldump -u username -ppassword database_name > dump.sql
모든 databases를 backup하시기 원하시면
mysqldump -u username -ppassword –all-databases > dump.sql 

자 이제 최신 버전(10.5)의 64bit MySQL을 다운받습니다. (10.5 MySQL받기)
다운받은 dmg를 mount 시켜보면 4개의 파일들이 있습니다.
ReadMe를 제외한 나머지 3개 모두 설치를 합니다.

설치 순서는
  1. mysql-5.1.38-osx10.5-x86_64.pkg (mysql입니다.)
  2. MySQLStartupItem.pkg (mac이 booting할때 mysqld를 자동 실행합니다.)
  3. MySQL.prefPane (시스템 환경설정에 MySQL panel을 추가합니다)
그 후 
sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
하여 mysql gem을 설치합니다.

백업했던 데이터들을 복구합니다.

mysql -u username -ppassword database_name < dump.sql 

자. 그럼 console을 열어서 제대로 동작하는지 확인을 해봅니다.
그런데 만약 아래와 같은 Error Message가 나온다면

uninitialized constant MysqlCompat::MysqlRes

mysql  gem이 여러개 깔려 있어서 그런것입니다.

sudo gem uninstall mysql

깔려있는 mysql gem들을 삭제후 재설치를 합니다. (이 부분은 아무리 뒤져봐도 정보가 없어, 혼자 삽질하다가 알아냈습니다.)

sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

MacPort

그 후 port를 upgrade해야 하는데.

sudo port selfupdate sudo port sync sudo port upgrade --force installed #아직 준비가 덜 된것들이 있어서 이 부분은 안하시는게 좋아요. 이것때문에 엄청 삽질했어요.

하시면 됩니다. 그런데 만약 아래와 같은 Error Message가 뜬다면

dlopen(/opt/local/share/macports/Tcl/pextlib1.0/Pextlib.dylib, 10): no suitable image found.

snow leopard용 port를 설치하신 후 upgrade하시면 됩니다. (snow leopard용 port 다운받기)


other gems
MySQL말고도 여러 gem들이 문제가 되고 있습니다. 이러한 gem들은 재설치를 해야 하는데, script를 이용하시거나, irb에서 명령어를 치셔서 하실 수 도 있습니다.
만약 gem들에서 문제가 발생하지 않는다면, 구지 재설치 하실 필요는 없습니다.
`gem list`.each_line {|line| `sudo env ARCHFLAGS="-arch x86_64" gem install #{line.split.first}`}

참고링크
ps. Mac에서 Safari로 글 썻더니.. 행간이 정리가 안되네요.
아 글이 무지 지저분해졌어 ㅠ,.ㅠ


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Johan Kim hiphapis

TRACKBACK http://hiphapis.net/trackback/166 관련글 쓰기

  1. [ROR] window7 x64환경의 ruby 1.9.2에 mysql2 gem 설치하기  삭제

    2011/10/20 19:41TRACKBACK FROM 월풍도원(月風道院) - Delight on the Simple Life

    windows 7 x64환경의 ruby 1.9.2에 mysql2 gem 설치하는 방법입니다.windows 7환경의 ruby 1.9.2에 mysql2 gem 설치하기gem을 설치하는 방법은 간단합니다.gem install mysql2하지만 안타깝게도 저의 64비트 윈도우 환..

  2. [RoR] 맥 OS X에 rvm을 이용해 ruby on rails 개발 환경 구축하기  삭제

    2011/10/30 18:39TRACKBACK FROM 월풍도원(月風道院) - Delight on the Simple Life

    맥에서 rvm(Ruby Version Manager)를 이용한 ruby on rails 개발 환경 구축 방법입니다.맥 OS X에 rvm을 이용해 ruby on rails 개발 환경 구축하기맥 OS X에서 루비 설치하기우선 터미널에서 아래의 커멘드를 이용해 RVM(Ruby Version Manager)을 설치합니다.$ bash &lt; &lt;(curl -s...

댓글을 달아 주세요

  1. 좋은 정보 감사합니다. 덕분에 쉽게 업그레이드할 수 있었습니다.

    2009/09/25 23:12 [ ADDR : EDIT/ DEL : REPLY ]
  2. 박은현

    + _ + 아주 많이 감사합니다..ㅎ

    2009/11/02 20:47 [ ADDR : EDIT/ DEL : REPLY ]

Ruby On Rails/작은 팁2009/04/15 06:21
제목을 뭐로 해야할지 참 애매하네요.
지금 만들려고 하는 Join Table은, 같은 Model을 향하는 Join Table입니다.(말이 어렵네요. ㅎㅎ)


Subscription 이라는 Join Table은 user_id, writer_id를 가지고 있습니다.
user_id, writer_id 모두 User Model을 가르키는 ID를 가지고 있죠.

제가 하고 싶은것은
User.subscriptions # User 구독하고 있는 모든 Users
User.subscribers # User 구독하고 있는 모든 Users
입니다.


Join Table명을 (딱히 좋은 이름이 생각안나서) Subscript로 변경하겠습니다.
class Subscript < ActiveRecord::Base
    belongs_to :user
    belongs_to :writer, :foreign_key => "writer_id", :class_name => "User"
end

class User < ActiveRecord::Base
    has_many :subscripts #내(Logged User)가 구독하고 있는 User ids
    has_many :subscriptions, :through => :subscripts, :source => :writer #내가 구독하는 Users

    has_many :subscribes, :foreign_key => "writer_id", :class_name => "Subscript" #날 구독하는 User ids
    has_many :subscribers, :through => :subscribes, :source => :user #날 구독하는 Users
end

코드 설명을 세세하게 하면 싫어하실것 같아 간략하게 코드 설명을 하겠습니다.
Subscript의 writer_id를 이용하는 새로운 관계(belongs_to)를 만듭니다.
그리고 그 만든 관계명을 User에서 writer_id로 User를 불러와야 하는 곳(:subscriptions)의 :source로 써준 것이죠.

좀 찜찜하지만 이런식으로도 구현할 수 있습니다.
class User < ActiveRecord::Base
    has_many :subscripts, :dependent => :destroy
    def subscriptions
        ids = self.subscripts.collect { |s| s.writer_id }
        User.find(ids)
    end
end
확장성의 제약이 있겠지만, 사용하는것에는 큰 문제점이 없을듯 하네요
하지만.. 그래도 역시 찜찜하죠? ㅎㅎ


여담>
지금 딱 새벽 6시 20분이네요. 오랜만에 와이프 아침밥이나 해주고 자야겠네요 ㅎㅎ (라고 말하고 기절하기)
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Johan Kim hiphapis

TRACKBACK http://hiphapis.net/trackback/162 관련글 쓰기

댓글을 달아 주세요

Ruby On Rails/작은 팁2009/04/14 17:52
test/test_helper.rb 에서
class Test::Unit::TestCase
class ActiveSupport::TestCase
요렇게 바꿔주면 됩니다.

참고링크
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Johan Kim hiphapis

TRACKBACK http://hiphapis.net/trackback/161 관련글 쓰기

댓글을 달아 주세요

Ruby On Rails/작은 팁2009/04/07 23:09
environment.rb 에서 RAILS_GEM_VERSION 을 '2.2.2'로 개발중이던것을
'2.3.2'로 수정하면..
uninitialized constant ApplicationController
라는 Error Message가 뜹니다.

Rails가 2.3 으로 Update 하면서 application.rb 가 application_controller.rb 로 변경이 되어서 생기는 문제점입니다.

직접 application.rb 파일을 rename 해주거나.
rake rails:update:application_controller 
이런식으로 rake를 해주셔도 됩니다.

저는 rake를 사용해서 작업했습니다.
이제 잘 되네요 :)

관련링크

덧.
위에 적은 rake는 rake rails:update에 포함되어 있다고 하네요.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Johan Kim hiphapis

TRACKBACK http://hiphapis.net/trackback/160 관련글 쓰기

댓글을 달아 주세요

Ruby On Rails/작은 팁2009/03/10 11:28
간만에 gem update 했는데.. mime-types에서 Error가 난다.
아쉽게도 Error문구를 기록을 못했는데..
libxslt가 없다면서 나는 에러였다.

libxslt가 뭔지 궁금해서 찾아봤는데 XSLT 란다.
XSLT는 Extensible Stylesheet Language Transformations 의 약자로, 쉽게 말해 XML을 다른형태로 바꿔주는 XML변신기 라고 보면 된다.

mime-types에서 쓸일이 없을것 같기도 하면서도, 왠지 쓸거 같기도 한 애매모호한 놈이다.
뭐 update를 안시켜주는데 별 수 있나.. 설치해줘야지

방법은 간단한다
emerge -av libxslt
dependent  묻는거 나오면 그냥 Enter 한번 눌러주면 된다. (물런 필요나 의도에 의해 No를 할 수 도 있음.)

간만에 emerge sync랑 world complie 하니.. 시간이 조금.. 크헉!
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Johan Kim hiphapis

TRACKBACK http://hiphapis.net/trackback/157 관련글 쓰기

댓글을 달아 주세요

  1. 데비안은 바이너리라서 간편합니다. :) 데비안으로 오세요~~

    2009/03/13 00:47 [ ADDR : EDIT/ DEL : REPLY ]

Ruby On Rails/작은 팁2008/04/21 11:37
흠..멋진걸..!! -ㅅ-;
확인해보니 host가 있는건 전부 이러네..
rubyonrails.org 만 제대로 뜨고;;
사용자 삽입 이미지

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Johan Kim hiphapis

TRACKBACK http://hiphapis.net/trackback/122 관련글 쓰기

댓글을 달아 주세요