Outsider's Dev Story: Ruby on Rails 카테고리 글 목록https://blog.outsider.ne.kr/Stay Hungry. Stay Foolish. Don't Be Satisfied.2024-03-15T16:04:40+09:00Textcube 1.10.7 : Tempo primoWEBrick 실행 시 "`require_frameworks': no such file to load" 에러 메시지Outsiderhttps://blog.outsider.ne.kr/3502009-07-06T23:43:43+09:002009-07-06T23:43:43+09:00Rails를 공부하면서 Ruby로 짜여진 레일즈의 기본 웹서버인 WEBrick을 실행하려고 하니까 실행이 되지 않고 에러메시지가 떨어졌습니다. WEBrick서버는 아래의 명령어로 실행이 됩니다. 기본적으로는 WEBrick이 실행되고 Mongrel, lighthttpd등이 설치되어 있으면 해당 웹서버가 실행되는 것으로 알고 있습니다.<br><br><div style="margin-left: 40px;"><font size="3"><span style="color: rgb(255, 118, 53); font-weight: bold;">ruby script/server</span></font><br></div><br>이렇게 하면 WEBrick이 실행되고 예제를 따라했어야 했는데 실행되지 않고 아래와 같은 에러메시지가 떨어졌습니다.<br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1165144082.gif" alt="WEBrick 실행시 에러화면 " height="167" width="550" /></div><br><pre class="line-numbers"><code class="language-clike">
outsider@outsider-laptop:~/Sources/Ruby on Rails/demo$ ruby script/server
=> Booting WEBrick
=> Rails 2.3.2 application starting on http://0.0.0.0:3000
/usr/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:269:in `require_frameworks': no such file to load -- net/https (RuntimeError)
from /usr/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:134:in `process'
from /usr/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:113:in `send'
from /usr/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/initializer.rb:113:in `run'
from /home/outsider/Sources/Ruby on Rails/demo/config/environment.rb:9
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require'
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:521:in `new_constants_in'
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require'
from /usr/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/commands/server.rb:84
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from script/server:3
</code></pre><br>자세한 에러메시지를 모르겠지만 `require_frameworks': no such file to load라는 메시자를 뿌리면서 WEBrick 실행에 실패했습니다.<br><br><a href="http://www.ruby-forum.com/topic/136893" target="_blank">관련 정보</a>를 찾아보니 위의 에러는 OpelSSL 라이브러리가 없어서 나타난 에러라고 합니다. <br><br><div style="margin-left: 40px;"><font size="3"><span style="color: rgb(255, 118, 53); font-weight: bold;">sudo apt-get install libopenssl-ruby</span></font><br></div><br><a href="http://blog.outsider.ne.kr/346" target="_blank">apt-get 명령어</a>로 OpenSSL 라이브러리를 설치합니다.(환경은 우분투 9.04입니다.)<br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1035387778.gif" alt="OpenSSL라이브러리 설치화면 " height="271" width="494" /></div><br>이제 WEBrick을 실행하면 기본포트인 3000포트로 실행이 잘 됩니다.<br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1121652445.gif" alt="WEBrick 부팅 성공 화면 " height="148" width="526" /></div><br><br><p><strong><a href="https://blog.outsider.ne.kr/350?commentInput=true#entry350WriteComment">댓글 쓰기</a></strong></p>Rails에서 입력형식 변경시 유니크값 체크하기Outsiderhttps://blog.outsider.ne.kr/3452009-06-21T23:14:14+09:002009-06-21T23:14:14+09:00요즘 Ruby on Rails 온라인 코스를 하면서 보통 Homework의 난이도가 그렇게 높지 않았었는데 이번에는 상당히 어려웠습니다. 물론 이부분은 Ruby에 대해서 배울때는 따로 루비를 공부하고 있었던 탓도 있었고 지금은 Rails는 따로 공부하고 있지 못하고 있어서 이기도 합니다. 어쨌든 그래도 약간 고민하고 있으면 할 수 있었는데 이번에는 장시간동안 고생을 했습니다. Homework와 관련된 것이라 따로 언급하지는 않겠습니다.<br><br><br><br>어쨌든 레일즈의 Active Record에는 유효성검증을 위해서 제공하는 기능들이 있습니다. 웹개발에서 유효성(Validation) 검증은 필수적이라고 하는데 이걸 편하게 할 수 있도록 <span style="color: rgb(204, 153, 0);">validates_라는 이름으로 시작하는 유효성 검증 헬퍼를 제공</span>하고 있습니다. 미리 약속된 이 헬퍼를 사용하면 자동으로 유효성검증을 실행합니다. 또한 이 검증외에 기능을 수행하기 위해서 <span style="color: rgb(204, 153, 0);">각 단계별로 콜백함수 또한 제공하고 있습니다. before_validation, before_save같은 함수이고 이걸 정의해 놓으면 해당 단계에서 해당 함수가 실행이 됩니다.</span><br><br>Homewor의 제약조건은 간단했습니다. <span style="color: rgb(204, 153, 0);">ActiveRecord에 credit_card라는 컬럼이 있는데 이 컬럼은 유일한 값이어야 하고 입력밧은 0000 0000 0000 0000나 0000-0000-0000-0000의 2가지 형식만 입력받아야 하고 필드에 저장은 0000000000000000와 같은 형식으로 저장이 됩니다. 콜백함수는 before_create, before_save 2가지를 사용해서 구현하는 것이었습니다.</span><br><br>아주 간단하게 생각하면 validates_uniqueness_of로 credit_card를 유니크로 지정하고 validates_format_of를 정의하여 정규식으로 입력형식을 지정해 주면 되는 것이고 before_create, before_save에서 입력받은 형식을 컨버팅해주고 저장하면 되는 것이었습니다. 하지만 막상 구현하려고 하니까 문제가 생겼습니다.<br><br><pre class="line-numbers"><code class="language-ruby">
validates_uniqueness_of:credit_card,
:message=>"credit card is unique."
validates_format_of:credit_card,
:with=>/[0-9]{4}[-| ][0-9]{4}[-| ][0-9]{4}[-| ][0-9]{4}/,
:message=>"Invalid credit_card format"
</code></pre><br><span style="color: rgb(204, 153, 0);">콜백함수인 before_create, before_save보다 validates의 실행시점이 더 빠르기 때문에 validates_uniqueness_of가 실행되는 시점에서는 디비에 들어있는 값들은 입력값의 형식이 변환되었기 때문에 유효성검증의 기능을 전혀 하지 못했습니다.</span> <span style="color: rgb(255, 118, 53);">validates_format_of에는 configration option인 실행시점을 바꿀 수 있는 :on이 있지만 :on은 validates_uniqueness_of에는 존재하지 않았습니다.</span> <a href="http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M002457" target="_blank">API문서</a>에도 Rails 2.1에도 나오지 않습니다. 다만 제가 가진 책인 Rails 1.2기반인데 여기서는 :on 옵션이 나와있는데 중간에 없어진 것인지는 잘 모르겠지만 일단 실행시점을 바꾸는 동작을 동작되지 않았습니다.<br><br>결국 오랜 고민을 했지만 Unique확인을 유효성 검증 헬퍼가 아닌 콜백함수에서 실행할 수밖에 없었습니다. 제가 선택한건 before_create였습니다. before_save에서 데이터 형식의 변환을 실행하고 before_create에서 변환된 값을 가지고 유일값인지 아닌지를 체크했습니다.<br><br><pre class="line-numbers"><code class="language-ruby">
def before_create
if User.find_by_credit_card(self.credit_card)
errors.add_to_base("credit_card is not unique")
return false
end
end
</code></pre><br>어쨌든 동작은 원하는대로 되긴 했는데 이게 맞는지도 잘 모르겠습니다.(이래서 좀더 공부를 해야되는데요.. ㅠ..ㅠ) ActiveRecord의 ORM기능을 이용해서 credit_card함수를 현재값으로 Select해서 값이 있을 경우 errors에 오류를 추가하고 false를 반환합니다. errors만 추가할 경우에는 에러만 추가되고 실제 값을 저장하는 것에는 상관이 없었습니다. raise를 이용해서 ActiveRecord의 오류를 발생시키는 것도 시도했었지만 return false를 하는 것만으로도 디비저장을 멈출 수 있었습니다.(저도 정확히 알지 못하는 상태의 포스팅이라 약간은 찜찜하군요. )<br><p><strong><a href="https://blog.outsider.ne.kr/345?commentInput=true#entry345WriteComment">댓글 쓰기</a></strong></p>[Book] 프로그래밍 루비 (Programming Ruby)Outsiderhttps://blog.outsider.ne.kr/3282009-04-30T02:56:20+09:002009-04-30T02:56:20+09:00<div class="ttbReview">
<fieldset style="margin: 10px; padding: 5px; width: 90%;"><legend><a href="http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=8991268250&ttbkey=ttboutsideris1727002&COPYPaper=1" class="aladdin_title">Programming Ruby 프로그래밍 루비</a></legend>
<p>
</p><table>
<tbody>
<tr>
<td><a href="http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=8991268250&ttbkey=ttboutsideris1727002&COPYPaper=1"><img src="http://image.aladdin.co.kr/cover/cover/8991268250_1.jpg" alt="" border="0"></a></td><td style="vertical-align: top;" align="left"><a href="http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=8991268250&ttbkey=ttboutsideris1727002&COPYPaper=1" class="aladdin_title">Programming Ruby 프로그래밍 루비 - 전2권</a> - <img src="http://image.aladdin.co.kr/img/common/star_s10.gif" alt="10점" border="0"><br>데이브 토머스 외 지음, 강문식 외 옮김/인사이트</td></tr></tbody></table></fieldset><br>Ruby on Rails의 그 Ruby에 대한 책입니다. 아시는 분들도 계시겠지만 루비온레일즈는 루비를 공부하고 레일즈를 공부해야 됩니다. 둘이 항상 붙어다니니까 접근할때도 한꺼번에 접근하기가 쉽고 실제로도 같이 나온 책이 있는데 약간 파악하는데는 도움이 되지만 결국 자세히 알려면 루비와 레일즈를 따로 공부를 하여야 할듯 합니다. 지난번 <a href="http://blog.outsider.ne.kr/194" target="_blank">Ruby on Rails 초고속 웹 개발의 시작</a>를 볼 때도 대충 어떻게 돌아가는지는 파악했지만(실제로 책이 상당히 얇은 책이긴 하죠.) 루비에 대해서 자세히 몰랐기 때문에 예제도 따라하기가 쉽지 않았습니다.<br><br>그래서 이 루비책을 보았습니다. <span style="color: rgb(204, 153, 0);">루비쪽에서는 상당히 유명한 명서이고 저 표지이미지 때문에 곡괭이책(PickAxe Book)이라는 이름으로 더 유명한 책입니다. </span>유명한 책 답게 내용은 아주 알찬 편입니다. 루비는 항상 할때마다 버전때문에 여러가지로 어려움이 많은데 이 책은 1.8버전대로 되어있고 정리가 잘 되어있어서 이해하기 쉬운편입니다. 지금 가장 많이 쓰는 버전대가 1.8버전인듯 하기 때문에 사용하는데 전혀 무리가 없습니다.<br><br>이책은 2권으로 이루어져 있습니다. 루비에 대해서 설명하는 본권이 하나 있고 별책이 하나 더 들어있는데 <span style="color: rgb(204, 153, 0);">별책에는 루비의 각 클래스와 함수에 대한 레퍼런스가 정리되어 있고 반정도는 공개되어 있는 많은 라이브러리에 대한 설명과 간단한 예제가 들어있어서 실무에 활용하기에 아주 좋을듯 합니다.</span><br><br>별책에서 레퍼런스가 정리되어 있기 때문에 본책에서는 설명과정중에 있는것 외에는 특별히 함수나 클래스의 용도에 대해서 별로 설명해 주고 있지 않습니다. 책을 읽는 흐름을 방해할 정도는 아니지만 혹 어떤 함수인지 헷갈린다면 별책에서 찾아보아야 합니다.<br><br><span style="color: rgb(255, 118, 53);">루비에 대해서는 이 책이면 충분하다고 할 정도로 책이 좋습니다.</span>(물론 실제 하다보면 많은 것들이 필요하겠지만요.) 이책을 공부할때는 리눅스 상에서 하기는 했는데 설치도 윈도우와 리눅스를 둘다 설명해 주고 있기도 하고 루비 설치부터 루비의 특징들, 어떤식으로 사용하는지에 대해서 설명도 상당히 좋고 예제도 설명해 주는 부분만 이해하기에 좋도록 잘 구성되어 있습니다. 거기에 irb, RDoc, rubyGem등 필요한 여러가지 툴들에 대해서도 잘 다뤄주고 있습니다. <br><br>루비에 대한 약간 좋은 이미지를 갖고 있어서 그런지 모르겠지만 책이 루비를 상당히 매력적으로 잘 묘사해 주는 듯한 느낌입니다. 새로운 언어를 배운다는 것은 쉬운일은 아닌데 그런 부분을 이해하기 쉽도록 순차적으로 잘 설명해 놓은 책입니다. 지은이들의 이름값대로 거기에 2판으로 최신내용으로 갱신되면서 루비프로그래밍을 한다면 꼭 가지고 있어야 할 책이 된 듯 합니다.<br></div><p><strong><a href="https://blog.outsider.ne.kr/328?commentInput=true#entry328WriteComment">댓글 쓰기</a></strong></p>루비젬(RubyGem) 명령어 정리Outsiderhttps://blog.outsider.ne.kr/3272009-04-24T11:44:06+09:002009-04-24T02:56:10+09:00새로운 언어를 만지기 시작했더니 모르는게 많아서 정리할 것도 많군요.<br><br>분위기를 좀 보니까 RubyGems를 앞으로도 많이 사용하게 될 것 같아서 gem 명령어를 좀 정리해 봅니다. 루비젬(RubyGem)은 루비의 표준화 패키징 및 설치 프레임워크로 gem으로 루비 어플리케이션이나 라이브러리를 설치하고 패키징하고 관리하는 역할을 합니다.<br><br><br><br><span style="font-weight: bold;">도움말</span><br><div style="margin-left: 40px;"><span style="color: rgb(255, 118, 53);">gem -h</span><br><span style="color: rgb(255, 118, 53);">gem --help</span><br><span style="color: rgb(255, 118, 53);">gem help</span><br></div><br><span style="font-weight: bold;">버전 보기</span><br><div style="margin-left: 40px;"><span style="color: rgb(255, 118, 53);">gem -v</span><br><span style="color: rgb(255, 118, 53);">gem --version</span><br></div><br><span style="font-weight: bold;">환경</span><br><div style="margin-left: 40px;"><span style="color: rgb(255, 118, 53);">gem environment</span><br></div><div style="margin-left: 40px;">환경정보 나옴<br></div><div style="margin-left: 40px;"><span style="color: rgb(255, 118, 53);">gem environment gemdir</span><br></div><div style="margin-left: 40px;">루비젬의 메인디렉토리 보기<br><span style="color: rgb(255, 118, 53);">gem update --system</span><br>최신버전으로 업데이트<br></div><br><span style="font-weight: bold;">패키지 설치</span><br><div style="margin-left: 40px;"><span style="color: rgb(255, 118, 53);">gem install -r 패키지명</span><br>( -r 은 install 하위명령을 원격으로 처리함)<br><span style="color: rgb(255, 118, 53);">gem install -r 패키지명 -v "< 0.5"</span><br>( -v 옵션을 통해 0.5버전보다 낮을 것충 최신버전 설치를 지정)<br><span style="color: rgb(255, 118, 53);">gem install -r 패키지명 -t</span><br>( -t 는 설치과정중 테스트 스위트 있으면 실행함)<br><span style="color: rgb(255, 118, 53);">gem install -r 패키지명 --rdoc</span><br>( RDoc 문서를 자동으로 생성함)<br></div><br><span style="font-weight: bold;">조회하기</span><br><div style="margin-left: 40px;"><span style="color: rgb(255, 118, 53);">gem query -rn 찾는이름</span><br>( -r은 원격, -n 은 정규표현식 /찾는이름/ 으로 검색)<br></div><br><br><br><a href="http://www.rubygems.org/read/book/2" target="_blank">gem Command Reference</a> 참고<br><br>아주 간단한 명령어정도만 정리했습니다. 빌드쪽은 아직 제대로 다뤄보지 못해서.... 차차 절리하려고 합니다. (이렇게 적어놓고 방치해놓은 포스팅이 꽤 되는데 ㅠ..ㅠ)<br><p><strong><a href="https://blog.outsider.ne.kr/327?commentInput=true#entry327WriteComment">댓글 쓰기</a></strong></p>Ruby에서 GUI확장을 위한 Tk Toolkit 설치하기Outsiderhttps://blog.outsider.ne.kr/3262009-04-24T02:09:27+09:002009-04-24T02:08:56+09:00루비로 <a href="http://www.aladdin.co.kr/shop/wproduct.aspx?isbn=8991268250" target="_blank">곡갱이책</a>을 보고 있는데 루비에서 GUI기능을 지원하는 확장기능으로 <a href="http://en.wikipedia.org/wiki/Tk_%28framework%29" target="_blank">Tk</a>를 사용하는 부분이 나오는데 깊게 다뤄주지 않는 관계로 예제를 따라하려고 보니까 Tk를 사용할 수 없었습니다. <br><br><a href="http://rubyforge.org/projects/rubyinstaller/" target="_blank">원클릭인스톨러</a>로 설치하면 Tk가 포함되어 있다는 내용이 있는데 저같은 경우에는 tk를 사용하려고 하면 아래와 같은 에러가 발생합니다.<br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1271040404.gif" alt="tk사용시 나오는 에러메시지 " height="195" width="550" /></div><br>tk를 찾지 못하고 에러가 나며 이는 Ubuntu에서도 동일하게 tk를 못찾고 있습니다. 설치가 안된 것인지 설치는 되었지만 ruby에 바인딩이 안된 것인지는 명확지 않지만(윈도우의 경우는 후자인것 같습니다.) 어쨌든 설치를 할 수 없었습니다.<br><br><br><br><br><font style="font-weight: bold;" size="6">Windows</font><br>윈도우즈에서는 상당히 쉬운 편입니다. Tk를 설치하기 위해 <a href="http://www.activestate.com/" target="_blank">ActiveState</a>에 가서 <a href="http://www.activestate.com/activetcl/" target="_blank">ActiveTcl</a>을 다운받습니다. 인터넷에서 보면 8.5를 써도 된다고도 나와있던데 8.5를 설치했더니 루비 1.8.6에서 호환이 되지 않더군요. 8.4버전을 받아야 하고 여기서는 ActiveTcl 8.4.19.1를 다운로드 받아 사용했습니다. 별도의 설정은 필요 없고 그냥 Next만 눌러서 설치해 주시면 됩니다.<br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1340667214.gif" alt="tk 인클루드가 성공한 화면 " height="148" width="424" /></div><br>설치한 다음에 Command창을 다시 띄워서 irb에서 tk를 불러들이면 정상적으로 동작하여 true가 뜹니다.<br><br>간단한 코드를 이용해서 Tk GUI Toolkit을 사용해 보겠습니다.<br><br><pre class="line-numbers"><code class="language-ruby">
require 'tk'
TkLabel.new { text 'Hello, World!'; pack }
Tk.mainloop
</code></pre><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1148341573.gif" alt="사용자 삽입 이미지" height="182" width="503" /></div><br>위 화면처럼 Tk를 이용해서 윈도우창을 띄웠습니다. <br><br><br><br><font style="font-weight: bold;" size="6"><br>Ubuntu</font><br>우분투에서는 더 쉽습니다. 다만 인터넷을 보면 Linux에서는 사실 좀 복잡한것 같습니다. 보통은 C++컴파일러를 가지고 tk랑 ruby를 다시 재컴파일시키라는 것 같은데 전 그런 재주는 없기에 우분투의 경우만 가지고 설명합니다. 우분투에서는 윈도우 만큼이나 아주 쉽습니다.<br><br><blockquote style="color: rgb(255, 118, 53); font-weight: bold;">sudo apt-get install libtcltk-ruby </blockquote><br>위의 명령어를 통해서 팩키지를 설치해주기면 하면 끝입니다. <br><br><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1238037636.gif" alt="사용자 삽입 이미지" height="92" width="550" /></div><br>설치하면 윈도우와 동일하게 tk가 require가 성공하고 오른쪽에 작게 윈도우가 뜬 것을 볼 수 있습니다.<br><br><br><br>참고자료 :<br><div style="margin-left: 40px;"><a href="http://www.tkdocs.com/tutorial/install.html" target="_blank">Installing Tk</a><br><a href="http://ruby.about.com/od/tk/a/Tk.htm" target="_blank">Graphical User Interfaces: Installing Tk</a><br></div><br>이제 Tk예제 좀 따라해 볼 수 있겠군요. ㅋ<br><p><strong><a href="https://blog.outsider.ne.kr/326?commentInput=true#entry326WriteComment">댓글 쓰기</a></strong></p>