http://weblog.rubyonrails.org/2016/6/30/Rails-5-0-final/


Rails 5.0이 정식 릴리즈 되었습니다.


드디어! 웹소켓을 지원합니다.

Action Cable이 바로 그것이죠.


기존 rails의 구조가 1 request-1 response를 기반으로 하는 만큼, 얼마나 웹소켓의 이벤트와 Rails ActionController 코드와 유연하게 연동이 되는지는 궁금합니다.


벌써 한글로 된 채팅 앱 구현 글이 올라왔네요!

http://blog.ask.co.de/2016/06/%EB%A0%88%EC%9D%BC%EC%A6%88-5%EC%9D%98-%EC%95%A1%EC%85%98-%EC%BC%80%EC%9D%B4%EB%B8%94%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%B1%84%ED%8C%85-%EC%95%B1-%EA%B5%AC%ED%98%84/


Api Mode는 back-end로 client-side javascript나 native-application과 JSON으로 통신이 가능하다고 하네요.


정확히 어느정도로 다른 어플리케이션과 유연하고, 성능상 잇점을 가져다줄 기능이 구현되었는지는 확인해봐야 알거 같네요.



빠른 개발 속도와, 상대적으로 낮은 학습비용에 비해 성능 문제와, 진입 자체는 쉽지만 많은 이해도를 요구하는 난제들도 함께 했던게 사실인 rails.


특히나 성능 문제로 인해 twitter는 rails를 포기하기도 해 많은 우려를 낳고 있었는데요, rails 5는 그런 우려를 불식시키고, 다시금 많은 장점으로 사랑받는 웹 프레임워크로 입지를 확고히할지는 더 두고 봐야할 문제라고 생각합니다.


자세한 Rails 5 차이점에 대한것은 제가 조금 더 사용해보고 알려드리겠습니다.


rails 5에 대한 간략한 사용법과 특징을 정리한 유투브 영상 한편 소개해드리며, 마무리할게요.




'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 엘키 엘키

댓글을 달아 주세요

현재까지 개발툴로 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 엘키 엘키

댓글을 달아 주세요

나는 리눅스 서버가 익숙치 않다.


국내에서의 교육용 내지는 서버 OS로 윈도우 서버를 많이 선택해온 실정도 있었던 터라, 익숙해 질 계기가 부족했던 것도 사실이지만 그렇다고 해도, 내 개인적인 탐구심과 노력이 리눅스가 익숙해지기 까지의 과정에 도달하지 못했던게 사실이다.


물론 리눅스로 서버를 운용해본적도 있으며, 가상 머신 내지는 서브 OS 로도 여러번 사용해왔지만, 메인 OS로 사용할만큼, 그리고 업무에 적극 사용할만큼 익숙하지 못했던 건 반성해야 될 부분이라고 생각한다.



윈도우 서버를 개발 해올 때에도, 여러가지 작업을 쉘 기반으로 이전해오며 리눅스처럼 사용하려 노력은 했지만, 막상 리눅스로 서버를 운용할 자신이 쉽게 생기진 않았다.


그러던 중, 이전까지의 메인 서버 언어였던 C++을 대신해, ruby on rails를 이용해 개발하다보니, 어쩔 수 없이 (윈도우 머신에서의 최적화는 무한도전에 가까울 만큼 동작하지 않는 gem이 많다. 딱 개발머신으로써만 사용해야 되는 수준) 리눅스 적응 프로젝트에 돌입했다.



앞에 글에서도 언급했듯 선정한 서버는 cent os다.


리눅스 자체가 오픈소스 정책 기반이다보니 forking 되어 여러가지 OS가 개발되고 있고, 그렇다보니 이제와서는 장단점마저 뚜렷해진 경향이 있었다.

그에 대해서는 아래 블로그를 참조했다.


리눅스의 종류와 선택

http://crampstory.tistory.com/40


리눅스 배포판 - 위키백과

https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%EB%B0%B0%ED%8F%AC%ED%8C%90


 

이 중 cent os를 선택한 계기는 바로 RHEL을 그대로 반영하는 무료 OS라는 점이다.

그리고 fedora의 혁신성과는 반대로 안정성이 높다.(fedora가 잔버그가 많기로 유명하다)


나는 개인적으로 여러번 써왔고 익숙한 ubuntu를 고르려 했으나, cent os를 선택하게 된 계기는 역시나 안정성이었다.


최신 버전의 갱신 주기가 잦고, 패키지가 빠르게 갱신되는 ubuntu에 비해 업데이트는 느리지만 그만큼 안정적인 버전이 도입된다.


이는 패키지 오류로 인한 시행 착오를 줄여주는 핵심 키워드 이기 때문에 cent os를 선택했다.




그렇게 cent os를 세팅하며 장벽에 대한 몇가지 생각이 들었다.


대소문자 구분.

-> 으... 윈도우가 편의를 위해 용인해준 것이 결국엔 문제가 됐다.

-> 리눅스에서 개발하고 싶을만큼 발견하는데 시간도 걸리고, 크리티컬 할 수 있는 요소.


쉘 기반으로 사용하는 것에 대한 거부감.

-> 다행히 나는 이 부분에선 극복했었던 상황.


패키지 버전 충돌 문제. [예를 들어 rails만 해도 ruby 버전에 따라 다르게 동작함. rbenv에서 버전 강제후 bundle update 해주어야 함]

-> 이 문제에 대한 이해는 윈도우에서도 dll 지옥을 겪어봤다면 납득 가는 문제중 하나일거라고 생각함.


권한 문제.

-> 서비스로 구동할때와, daemon으로 구동할때의 권한차이.

-> 헌데 이문제도 윈도우도 같다... 윈도우 서비스로 구동할때와 쉘이나 gui로 구동할 때의 실행 계정과 권한에 차이가 있다.


서버마다 반복되는 세팅 작업.

-> 쉘기반이라 이건 그냥 극복이 되는 문제 아닌가?

-> docker를 이용하거나 각종 세팅 스크립트를 짜놓고 구동 시켜도 충분히 해결되는 문제이기는 함.


그래도 가끔 필요하다 싶은 GUI 기반 작업에 대한 고뇌.

-> 몇가지 해결책을 제공하고 있는듯 하다. 웹 기반으로 UI를 제공한다거나, port 개방을 통해 GUI 기반 OS에서 원격 제어를 허용하는 등의 방식으로. [postgresql만해도 세팅 후 포트 개방 후, 윈도우에서 제어하면 좀 더 편하게 제어할 수 있다.]

-> 데스크탑 모드로 설치해서 서버로 구동하는 것은 반대. [메모리 사용량만해도 10배 이상 차이나는 경우가 많다. 기본적으로 SSH로만 사용하는 것을 권장한다]


그럼 남는 것은...? 현재 게임 머신으로써의 의미를 제외하고나면, 윈도우 머신을 굳이 써야 할 의미가 없다.

개발 머신 자체가 맥인것도 고민해봤으나, 굳이 프로그래머는 맥일 필요도 없다고 생각한다.

애초에 많은 오픈소스의 기반이 리눅스다.


아니 적어도 서버 머신 하나는 리눅스로 설치해두고, 여러 개발자가 접속해 관리하며 익숙해질 필요는 충분히 있다고 생각한다.

물론 나의 경우만해도, 윈도우 서버로 대체 할 수 없는 개발 플랫폼을 선정했기 때문에 적응된 부분이지만, 적응하고 보니 그 장벽이 그리 높지 않다는 확신이 든다.


우선 생각보다 그리 어렵지 않고, 여러모로 효율적이다. 


특히 스크립트 기반 환경이다보니 자동화를 안하면 극도로 번거로운 작업이 많다. (쉘 명령어를 외워야 한다거나, 특정 프로그램 설치 위치가 중구난방이라 찾기 어렵다거나 하다면 윈도우 서버때보다 훨씬 번거로울 수도 있는 것도 사실이니까) 


하지만 자동화를 해놓으면 윈도우보다 편해지고, 스크립트만 잘 정리하고, 설치위치에 대한 룰만 잘 정하고 사용한다면 엔지니어적으로 잘 관리된 환경을 만나볼 수 있다. (사용하다보면 리눅스가 얼마나 프로그래머스러운 판단들로 내부 시스템을 구성해놓았는지 알 수 있을 것이다.)



이상 윈도우 프로그래머의 리눅스 적응기였다.



'OS > Linux' 카테고리의 다른 글

CentOS7 redmine 설치  (0) 2016.08.20
CentOS 7 rails 서버 세팅  (0) 2016.02.08
CentOS 7 FTP 서버  (0) 2016.02.08
윈도우 서버에서 리눅스 서버로의 감상  (0) 2015.11.15
Cent OS 7 svn 설치  (0) 2015.11.13
Cent OS 7 세팅기  (0) 2015.11.07
Posted by 엘키 엘키

댓글을 달아 주세요

script/rails 파일이 존재하는지와 내용을 확인 해볼 것.


해당 파일에


#!/usr/bin/env ruby.exe

APP_PATH = File.expand_path('../../config/application',  __FILE__)

require_relative '../config/boot'

require 'rails/commands'



위와 같은 정보가 있는데, 이 정보들을 바탕으로 서버를 구동 시키려 하기 때문.


'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 엘키 엘키

댓글을 달아 주세요


Rails Ruby 작성된 MVC모델을 기반 프레임워크입니다.

 

쉽고 빠르게 어플리케이션을 구축 있도록 도와줍니다.

 

Rails 비슷한 역할을 하는 프레임워크로는 java spring, python django, php code igniter 등이 있습니다.

 

Rails 장점은 Ruby 자체가 가진 유연성이라고 있습니다.

Rails 자체도 Ruby 이루어졌지만, Rails application ruby 작성됩니다.

 

Ruby 모든 것은 객체이며 동적 타입을 통한 코드 유연성을 기반으로 손쉬운 회귀 테스트 장점이 무궁무진합니다.

 

제가 느꼈던 Rails 장점을 나열해보겠습니다.

 

  1. Ruby 프로그램을 작성한다.

이는 생각보다 장점입니다. 루비 언어 자체가 생산성이 좋은 언어입니다.

Ruby 메소드 접미사로 !, ? 통해 역할의 의미를 함축해 포함하기도 하며, 메타 프로그래밍에도 능수 능란한 언어입니다.

  1. MVC모델의 완성도가 높다.

모델명에 맞추어, 동일한 이름의 View, Control 구현하면 무리 없이 동작합니다.

또한 Rake 통해 MVC 모델의 구성요소를 쉽게 build 있고, scaffold 옵션을 통해 MVC 구성 요소를 한번에 구축해주기도 합니다.

  1. 라이브러리 연동이 편하다. (리눅스에서는)

안타깝게도 윈도우에서는 미동작하는 gem 많습니다.

만약 리눅스 환경이라면, 서비스에 까지 필요한 대부분의 기능은 동작한다고 보셔도 무방합니다.

리눅스 환경의 단점으로 일컬어 지는 라이브러리 버전간 호환성 문제는 gemfile에서 특정 버전까지 명시함으로써 우회 가능합니다.

 

개인적으로는 윈도우 환경에서 서비스까지 하기엔 적절치 않습니다만, 리눅스 서버 환경에서 관리한다는 전제하에선 생산성 최고의 언어가 아닌가 생각합니다.

 

단점으로 일컬어 지는 속도 문제는, ruby 느리지만 rails 빠르다 라는 말도 있듯이, 충분히 php 근접한 속도를 있습니다. 이에 대해선 링크로 대신하겠습니다.

http://www.comentum.com/ruby-on-rails-vs-php-comparison.html

http://stackoverflow.com/questions/2529852/why-do-people-say-that-ruby-is-slow

 

 

새로 시작할 개발용 프레임워크를 고민 중이시라면, Rails 어떠신가요?

빌드 속도를 Rails(철도길) 달리듯 빠르게 도와줄 겁니다.



Ruby on Rails 공식 페이지

http://rubyonrails.org/


RAILS 시작하기

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

REST?

http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/12/rest/about#s-2.1


Posted by 엘키 엘키

댓글을 달아 주세요

  1. Favicon of https://lifeaddict.tistory.com BlogIcon 인생중독자 2015.01.20 09:20 신고  댓글주소  수정/삭제  댓글쓰기

    좋은정보 얻어가서 기분이 좋습니다. 감사합니다.

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' 를포함하고 시도.

-> 해결

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

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
액티브 쿼리 인터페이스  (0) 2013.05.28
Database Migration 하기  (0) 2013.04.15
Posted by 엘키 엘키

댓글을 달아 주세요

text file을 line별 parsing을 하고 split 하려던 중, 오류 발생.
-> ruby invalid byte sequence in utf 8
-> ruby도 encoding 문제에서 자유롭지 못함.
-> 사실 이건 모든 프로그래밍 언어의 문제...정확히는 윈도우와의 호환에서 생기는 문제.
-> 해당 문자열에 force_encoding("iso-8859-1").encoding("UTF-8")을 하니 처리 되기 시작.
-> 헌데, 읽혀진 문자열에 유효하지 않은 공백이 포함됨.

text 파일이 ANSI, utf-8은 정상적으로 읽힘. 헌데, unicode option의 text file만 안읽힘. (notepad encoding option중 utf-8, ANSI는 정상적이고, unicode에서만 문제가 생김)
-> 각종 encoding option 으로 해결 안됨.
-> line 별 encoding 을 시도.
-> 첫번째 라인만 encoding 됨. 두번째 라인부터 꼬임.
-> line별 encoding을 확인해보았더니, 두번째 라인부터는 CP949 (ascii code page 949)로 인식되는 것을 확인.
-> C++에서 binary로 읽어 메모리값 확인해보니 처음 2byte가 254,255로 들어가 있었음. 이 값이 인코딩 방식에 대한 기록 값이었던 것.
-> 파일 전체를 열고 버퍼 전체를 인코딩 해보았더니 정상적으로 읽힘.
-> 해결!


정리하자면,
IO.foreach('file.rb') do | line |
    line.encode!("UTF-8", "UTF-16le", :invalid => :replace, :undefined => :replace, replace: "")
end



위와같이 변환시에는 첫 라인만 제대로 변환되고 두번째 라인부터는 값이 망가지더군요.


그래서, 

lines = Array.new
fSize = aFile.stat.size
if aFile
	content = aFile.sysread(fSize)
	content.encode!("UTF-8", "UTF-16le", :invalid => :replace, :undefined => :replace, replace: "")
	lines = content.split(/(\n)/)
else
	puts 'Unable open file'
end




위와같이 파일에서 읽은 내용 전체를 한번에 변환시 잘 처리 되었습니다.


stackoverflow의 관련 글

http://stackoverflow.com/questions/14035307/ruby-invalid-byte-sequence-in-utf-8-argumenterror

http://stackoverflow.com/questions/11065962/ruby-split-invalid-byte-sequence-in-utf-8-argumenterror

http://stackoverflow.com/questions/24036821/ruby-2-0-0-stringmatch-argumenterror-invalid-byte-sequence-in-utf-8

'Scripts > Ruby' 카테고리의 다른 글

Welcome to ruby!  (0) 2014.11.04
Ruby invalid byte sequence in UTF-8 (Argument Error)  (0) 2014.10.30
루비에서 쉘 명령을 내리는 방법  (0) 2014.06.03
루비 주석  (0) 2014.02.07
루비 변수 관련 정리  (0) 2013.05.14
Ruby가 모듈을 찾는 장소.  (0) 2013.05.09
Posted by 엘키 엘키

댓글을 달아 주세요

이전버튼 1 2 이전버튼

블로그 이미지
Software Engineer
엘키

공지사항

Yesterday31
Today29
Total1,605,483

달력

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

글 보관함