달력

09

« 2010/09 »

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  
이 문제들을 해결하느라 하루를 허비했네요.

간단정리
  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 기다림
제목을 뭐로 해야할지 참 애매하네요.
지금 만들려고 하는 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 기다림
test/test_helper.rb 에서
class Test::Unit::TestCase
class ActiveSupport::TestCase
요렇게 바꿔주면 됩니다.

참고링크
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Johan Kim 기다림
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 기다림
간만에 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 기다림