'루비 온 레일즈'에 해당되는 글 4건

  1. 2016.04.14 vscode with rails
  2. 2014.12.16 Rails를 이용한 웹 로그 서버 구축기 ver2
  3. 2013.05.28 액티브 쿼리 인터페이스
  4. 2013.04.12 웹 로그 서버 구축기

현재까지 개발툴로 C#과 C++에서는 이견이 없이 visual studio 2015를 사용해왔습니다.

ruby (& rails) 의 경우 visual studio에서 지원하지 않아, windows환경에선 aptana studio 3 (http://www.aptana.com/)를 사용했고요.


그러던차 node.js를 쓸 일이 좀 있어, visual studio에 node.js 플러그인을 설치해 사용하려 했습니다만… 버그인지 CPU 점유율이 25%이상을 점유하고, 메모리가 계속 증가해 visual studio가 크래시 되더군요. 같은 설치 상태에서, C#, C++은 문제가 없는데 node.js 프로젝트에서만 발생했습니다.

-> VS2015 Update 2 이후 발생하지 않네요.


그리하여 다른 솔루션을 찾던 중, vs code를 사용해보았습니다.

node.js 기반에서 며칠 사용해보니, 여러모로 편리했습니다 . atom기반 이라지만, atom의 학습비용이 드는 환경 설정 문제가 해결되어있어, 더더욱 편리하게 사용 가능했습니다.


node.js 개발 환경으로 아주 만족스러웠습니다. (visual studio 사용자 기준, atom보다 친숙하고, 편하다고 생각합니다) 자연스레 ruby (& rails) 개발 환경으로도 써볼까 하는 욕심이 들었는데요,


그리하여, vs code의 ruby plugin을 찾기 시작했습니다.

https://marketplace.visualstudio.com/vscode/Languages?sortBy=Downloads


몇개 없더군요. 실제로 ruby의 debug plugin은 아래 하나라고 보시면됩니다.

https://marketplace.visualstudio.com/items?itemName=rebornix.Ruby

[github: https://github.com/rebornix/vscode-ruby]


설치 방법은 Ctrl + P를 누르시고, ext install Ruby를 입력하시면 됩니다.

그리고 F5를 누르시면, 어떠한 언어로 해당 환경에서 구동 할 건지를 결정하는 창이 뜹니다.


Ruby를 선택하시면 기본 환경 설정 파일 (launch.json)이 생성됩니다.


저는 기본 생성된 json에서, program에서의 디버깅할 rb파일 명 (main.rb -> xlsx_magician.rb)과 args (없으면 ARGV[0]에 string undefined가 환경 변수 ARGV에 담겨 스크립트에 전달 됩니다.)를 추가했습니다.


여기서 주의하실 점은 "args": [""] 로만 비울 경우는 undefined가 아니라, ARGV자체가 not available 상태라는 점입니다. "args" 항목을 아예 사용하지 않았을 때와 달라요.


launch.json에 "args" 항목 미사용시

- ARGV = not available


"args": [""]로 넘길 경우

- ARGV = undefined


"args": ["Character.xlsx"]


- ARGV = ["Character.xlsx"]




자 이제 rails 디버깅 환경에 대해 살펴볼까요?


rails의 경우에는 launch.json을 보강해주셔야 합니다.

https://marketplace.visualstudio.com/items?itemName=rebornix.Ruby을 참고하세요.


그리고 좌측에 DEBUG 구동 설정에서 Debug Local Files로 선택되어 있는 것을, Rails Server로 바꿔주셔야 합니다.


rails가 4.2.x로 넘어오면서, 기본 binding 주소가 local에서만 접근가능하게 바뀌었습니다.

그렇다 보니 환경 변수를 넘기고 싶었는데요, 위 설정에서 args에 아무리 파라미터를 확장해봐도, rdebug-ide.bat 파일에 넘어가는 인자가 확장되더군요. 오픈 소스인지라 github의 해당 소스 코드를 직접 찾아보니 더 명확해지더군요. rdebug-ide.bat에 넘기는 인자만 확장 될 뿐입니다.


그리하여, 기본적으로 -b 0.0.0.0으로 bind 하는 것과 같은 결과를 내기 위한 방법을 찾아봤습니다.


아래 링크에서 보이듯 boot.rb를 고쳐주시면, 기본적인 서버 구동시에도 0.0.0.0으로 bind 됩니다.

https://fullstacknotes.com/make-rails-4-2-listen-to-all-interface/


물론 여전히 아쉬운 점은, 다른 인자를 못 넘긴다는 점인데요, 이 부분은 환경 설정 rb 파일을 변경해서 테스트하는 방법 정도로 절충해야 할 거 같네요.


vscode-ruby를 변경하는 방법도 있긴 하지만, 저는 우선 여기까지로 환경 설정을 마무리했습니다.


실제 개발 환경으로 사용하는 데에 크게 무리가 없었습니다. eclipse 기반의 aptana studio 3가 큰 만족도가 아니었다는 점도 한 몫 한다고 보고요.


vscode도 아직은 ruby 개발 환경으로 아쉬운 점이 있지만, 그래도 현재 까지의 윈도우에서의 개발 환경도 그다지 만족스럽지 못한, 번거로운 점이 많았다는 것을 감안했을 때, 대안이 될 수 있지 않을까 합니다.

'Web > Ruby on Rails' 카테고리의 다른 글

Rails 5.0 Release  (0) 2016.07.02
vscode with rails  (0) 2016.04.14
rails aptana studio에서 디버깅 안될 때  (0) 2015.04.14
Rails를 이용한 웹 로그 서버 구축기 ver2  (0) 2014.12.16
Ruby on Rails 소개  (1) 2014.12.02
windows 환경에서의 mysql2 gem 문제  (0) 2014.11.12
Posted by 엘키 엘키

댓글을 달아 주세요

개발 목표

  • 자동으로 파일로 남겨져 있는 로그를 분석해, 시스템에 영향을 주는 작업을 알려주기 위해 개발 됐다.
  • 파일로 남겨져 있는 log db으로 밀어 넣는 작업은 log_shipper 담당한다.
  • db 있는 데이터를 조건에 맞게 검색해서 보여주는 역할을 하는 web_server 만들고자 의도했다.
    ->
    실제 쿼리 작성 비용과 web_server API 개발 비용이 크게 차이 나지 않음을 느낄 있다.
  • 서비스 중에도 볼 수 있도록, REST API 서버로서의 기능도 수행한다.
    -> 관련된 기능은 개발용으로 put method 만들어둔 것을 이용하면 된다.
     

최종 목표

  • 통지 기능
  • 서비스에 문제가 있었는지를, 유저 보고가 오지 않더라도 있게끔 한다.
  • base line 설정 기능.
  • major patch시나, 무언가 의심될 때는 익일 보고 모드가 아닌 observer mode 동작 시키자.
     

installation

 

동작 방식

  1. 서버는 파일로 로그를 떨군다.
  2. local 남겨진 로그를 log shipper db 운송한다.
    -> option
    따라 web으로 직접 전송하기도 한다. (observer mode)
  3. 원하는 목표를 산출하기 위한 가지 기능을 Ruby on rails 통해 이용한다.

 

구현 issue

  • db 병목에 대한 대처. (기본적으로 rdb 대한 접근이 실시간으로 이루어져, 이에 대한 비용 문제가 있다.)
    -> partioning
    할까?
    -> raw data
    직접 쌓는 지금 방식에서 개선이 필요하다.
    -> raw data
    합산해서 http call 하고, 데이터를 바로 쌓지 않고 find and update 하는 구조로 가야 싶다.
  • mvc 1:1 대응으로만 구현하면 성능의 문제에 휘말림.
    -> db
    cahching model 통해 구현해야 .
  • text file line parsing 하고 split 하려던 , 오류 발생.
    -> ruby invalid byte sequence in utf 8
    -> ruby encoding 문제에서 자유롭지 못함.
    ->
    사실 이건 모든 프로그래밍 언어의 문제...정확히는 윈도우의 문자열 코드 페이지 처리에서 생기는 문제.
    ->
    해당 문자열에 force_encoding("iso-8859-1").encoding("UTF-8") 하니 처리 되기 시작.
    ->
    헌데, 읽혀진 문자열에 유효하지 않은 공백이 포함됨.
  • text 파일이 ascii, utf-8 정상적으로 읽힘. 헌데, unicode option text file 읽힘.
    ->
    각종 encoding option으로 해결 안됨.
    -> line
    encoding 시도.
    ->
    번째 라인만 encoding . 번째 라인부터 꼬임.
    -> line
    encoding 확인해보았더니, 번째 라인부터는 CP949 (ascii code page 949) 인식되는 것을 확인.
    ->
    파일 전체를 열고 버퍼 전체를 encoding 해보았더니 정상적으로 읽힘.
    -> 해결!

 

production 이슈

  • mysql2 사용법을 따라 해도 gem install부터 안됨.

번째 문제는 x64 mysqlconnector 이용한 것이 원인.

x86으로 바꾸고 시도. Gem install에는 성공함.

 

Install 됐으나 정상 동작하지 않음.

구글링 해보니 루비 설치폴더에 libmysql.dll 수동으로 넣어줘야 된다고 .

해당 파일을 C:\mysql-connector-c-6.1.5-win32\lib 에서 해당 파일을 C:\RailsInstaller\Ruby2.0.0\bin  옮겨주니,

 

gem mysql2 수동 설치 되기 시작.

gem install mysql2 --platform=ruby -- '--with-mysql-dir="C:\mysql-connector-c-6.1.5-win32"'

 

gemfile gem 'activerecord-mysql2-adapter'  포함하고 시도.

rake db:migrate

에서 문제

 

gemfile gem 'mysql2'  포함하고 시도.

-> 해결

 

현재 미구현 사항

  • 통지 기능

-> ruby script 연동해 메일 발송 기능을 지원?
-> ror
trigger 기능이 없음. 정해진 시간에 http call 해줄 애는 누구로..?

  • log_shipper call 시점과 주체는?
  • 로그 남기는 것을 float이나 double같은 실수 형으로 남기도록 수정. (count말고 수행 시간 같은 )
  • 테이블 인덱스 설정
    -> IP, Message pair key 잡으면 ?


해결 목록

  • partioning table 처리 (DB 병목 대비)
    -> partioning 처리 자체를 update or insert 처리 했으므로 DB 병목의 가능성은 줄였고, 대신 데이터 수신 비용이 증가.
  • Log_shipping 병렬화

-> 1 thread 사용
-> 2 thread pool 사용 (concurrent-ruby gem 기능 사용)


'Web > Ruby on Rails' 카테고리의 다른 글

vscode with rails  (0) 2016.04.14
rails aptana studio에서 디버깅 안될 때  (0) 2015.04.14
Rails를 이용한 웹 로그 서버 구축기 ver2  (0) 2014.12.16
Ruby on Rails 소개  (1) 2014.12.02
windows 환경에서의 mysql2 gem 문제  (0) 2014.11.12
ruby on rails 세팅 for windows  (0) 2014.10.29
Posted by 엘키 엘키

댓글을 달아 주세요

액티브 쿼리 인터페이스

http://rubykr.github.io/rails_guides/active_record_querying.html


튜토리얼만 잘 읽고 가이드만 잘 따라가도 평타를 칠 수 있는 언어! 루비....인데, 액티브 쿼리 인터페이스 읽다말고 find_by_sql을 발견 한 후, find_by_sql 위주로 작업을 했더니 몇가지 문제가 있었습니다.


현재의 세팅환경은, 다음과 같습니다.


develop : sqlite

production : mysql


이렇게 쓰다보니, 특정 dbms 종속형 쿼리를 작성 했을시에 특정환경에선 동작하지 않는 기능을 만들어버리는 것이었죠.


ROR의 액티브 쿼리 인터페이스란걸 알고보니 어지간한건 직접 쿼리 안짜고 가능하더군요!!


아래는 ROR에서 지원하는 메소드 종류입니다.

  • where
  • select
  • group
  • order
  • limit
  • offset
  • joins
  • includes
  • lock
  • readonly
  • from
  • having

뭐 여타 DBMS에서도 흔히 볼 수 있는 구문들이므로...자세한 설명은 패스하겠습니다.

만약 저처럼 find_by_sql을 많이 쓰고 계신다면, 가급적 액티브 쿼리 인터페이스를 쓰시는 것이 여러모로 장점이 많지 않을까 싶네요.

'Web > Ruby on Rails' 카테고리의 다른 글

Ruby on Rails 소개  (1) 2014.12.02
windows 환경에서의 mysql2 gem 문제  (0) 2014.11.12
ruby on rails 세팅 for windows  (0) 2014.10.29
액티브 쿼리 인터페이스  (0) 2013.05.28
Database Migration 하기  (0) 2013.04.15
웹 로그 서버 구축기  (0) 2013.04.12
Posted by 엘키 엘키

댓글을 달아 주세요

현재 웹 로그 서버로 루비 온 레일즈를 사용해 개발중에 있습니다.


그 과정에서 간략한 기록 겸 정리로 포스팅해봅니다.



윈도우용 루비 개발에 이용한 Quick Installer 입니다.


RailsInstaller

http://railsinstaller.org/



루비 적응에 참고한 튜토리얼입니다.


Ruby on rails - getting started Tutorial

http://rubykr.github.com/rails_guides/getting_started.html


Ruby on Rails - Active Records Query Interface

http://rubykr.github.io/rails_guides/active_record_querying.html



scaffold를 이용해 쉽게 기본 기능을 만들어내는 구문입니다.

rails generate scaffold Post name:string title:string content:text



각종 책과 튜토리얼 등을 보면서, 튜토리얼을 보면서도 이해가 잘 안가서 가장 많이 시간을 소요한 부분...

method 등록하는 법에 대한 포스트입니다.


routing error -> No route matches

https://groups.google.com/forum/#!msg/rubykr/nfryLxkh9oI/bQ4w9lRjafgJ


요악하자면, 

routes.rb

resources :컨트롤러명 do 
  collection do 
   get :액션 이름
  end
end

이렇게 추가해준 뒤,

rake routes를 해주면 등록됩니다.


루비 온 레일즈 사용해본 결과 MVC 모델로 설계 되어있어 역할 분담이 잘 되어있더군요.

model : 사용될 데이터 구조 (모델)
view : controller에서 제어한 동작을 보여주는 코드 정의 
controller : action 별로 controller에 동작을 정의

아직 많이 사용해보지 못했지만, 개발 속도는 압권입니다.
routing error에서 헤멘 것 제외하면, 실제 개발 시간은 2시간 남짓에 웹 로그 서버를 구축했습니다. (운용 가능할 정도의 다량의 로그를 쌓는 작업에 대한 측정이나, 테스트는 제외하고 단순 기능 구현)

루비를 서버 제어 스크립트로 작업하고, 이번에 웹 로그 서버 작업을 하면서도 느끼는데, 루비에 대한 호감도가 계속 올라가네요.

자세한 내용은 공개하기 어렵지만, 간략하게라도 삽질기나 팁같은거 공유해보도록 하겠습니다. 



'Web > Ruby on Rails' 카테고리의 다른 글

Ruby on Rails 소개  (1) 2014.12.02
windows 환경에서의 mysql2 gem 문제  (0) 2014.11.12
ruby on rails 세팅 for windows  (0) 2014.10.29
액티브 쿼리 인터페이스  (0) 2013.05.28
Database Migration 하기  (0) 2013.04.15
웹 로그 서버 구축기  (0) 2013.04.12
Posted by 엘키 엘키

댓글을 달아 주세요

이전버튼 1 이전버튼

블로그 이미지
Software Engineer
엘키

공지사항

Yesterday31
Today27
Total1,605,481

달력

 « |  » 2020.8
            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 31          

글 보관함