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 ]

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. 这是一个伟大的后!这是非常丰富的。我期待着阅读他的工作。另外,我肯定书签您的网站,使您可以稍后再回来。我喜欢每分钟阅读。

    2011/12/20 15:32 [ ADDR : EDIT/ DEL : REPLY ]
  2. 我要感谢你为这个伟大的阅读!我绝对欣赏它的每一个点点,我中有你检查出新的东西,你张贴书签。

    2012/01/31 15:37 [ ADDR : EDIT/ DEL : REPLY ]
  3. 我要感谢你为这个伟大的阅读!我绝对欣赏它的每一个点点,我中有你检查出新的东西,你张贴书签。

    2012/01/31 15:38 [ ADDR : EDIT/ DEL : REPLY ]
  4. 这是非常丰富的。我期待着阅读他的工作。另外,我肯定书签您的

    2012/02/01 05:08 [ ADDR : EDIT/ DEL : REPLY ]
  5. 이 문서는 정말 좋았어. 당신은 확실히 같은 훌륭한 기사를 생산하는 연구에 많은 시간을 보낸 것으로 나타났습니다. 감사합니다.

    2012/02/04 16:50 [ ADDR : EDIT/ DEL : REPLY ]
  6. 개인용 컴퓨터에 대한 새로운 아이디어를 얻기 위해 나를 도와 주셔서 감사합니다. 나는 또한 최고의 상태로 노트북을 유지하는 최선의 방법 중 하나가 하나의 컴퓨터의 맨 위에 일치 아마도 하드 플라스틱 형 재료의 경우, 또는 쉘 있었던 것으로 확신합니다. 그들이 자연 케이스에 완벽하게 맞도록 제작되므로 보호 장구 이런 종류의 독특한 모델이 될 것이다. 당신은 공급 업체에서 직접 이들을 구입하거나 그들이 당신의 노트북을위한 경우 타사의 장소를 통해, 그러나 자사의 모든 노트북은 시장에 대한 지출이있을 수 있습니다. 마찬가지로 이전, 귀하의 조언에 감사드립니다.

    2012/02/07 16:09 [ 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/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 ]