2016. 9. 27. 21:24 Web/Django

Django Celery 사용법

설치

  • pip install -U Celery

  • pip install django-celery

  • 데이터베이스 migration 필요. [djcelery를 위해]

Django 설정

  • settings.py에 아래 내용을 추가한다.

import djcelery

djcelery.setup_loader()

BROKER_URL = "amqp://guest:guest@localhost:5672//"

  • settings.py 파일에 추가

INSTALLED_APPS = (

'djcelery',

'myapp',

)

    • 두 가지를 추가해야 한다. myapp은 개발하고 있는 app의 이름이 되겠다.

Task 생성

from djcelery import celery

@celery.task(name='tasks.add')

def add(x,y):

 return x + y


@celery.task(name='tasks.sleeptask')

def sleeptask(i):

 from time import sleep

 sleep(i)

 return i

  • 테스트 목적으로 두 개의 task를 만들었다. 하나는 즉시 값을 리턴하는 add함수와 10초 뒤에 task를 반환하는 sleeptask 함수이다.

View 만들기

  • django app의 views.py에 아래의 내용을 추가

from django.http import HttpResponse

from myapp import tasks


def test_celery(request):

   result = tasks.sleeptask.delay(2)

   result2 = tasks.add.delay(2,5)

   return HttpResponse("this is task test (id : %s)"%result.id)


이렇게 view 만들어놓고 url view 호출할 있도록 해야한다.


urlpattern 아래 내용을 추가해준다.


import views as taskview


urlpatterns = patterns(

                      ...

                      url(r'^test$',taskview.test_celery),

                      )

가동

  • python manage.py celeryd -l info

직렬화

Consumer

주의 사항

  • 15672는 웹 포트다. 5672 포트로 연결해야 한다.

  • 연결이 RabbitMQ에서 끊어질 시에는 RabbitMQ 관리 웹 페이지에서 Can access virtual hosts가 설정되어있는 계정인지 확인해볼 것.

  • tasks로 만들어 던지는 함수에 req를 바로 던질 수 없다. pickle 가능한 object만 던져야 한다. 즉 파라미터들을 꺼내서 던져야 한다는 의미.

  user_no = int(req.session['user_no'])

  return tasks.celery.delay(user_no)

참고


'Web > Django' 카테고리의 다른 글

Django Celery 사용법  (0) 2016.09.27
Django 사용법 정리  (0) 2016.09.27
웹서버 중에서 Django를 선택한 이유  (0) 2016.09.27
Posted by 엘키 엘키

댓글을 달아 주세요

2016. 9. 27. 21:17 Web/Django

Django 사용법 정리

Django

Django package

python

python package


'Web > Django' 카테고리의 다른 글

Django Celery 사용법  (0) 2016.09.27
Django 사용법 정리  (0) 2016.09.27
웹서버 중에서 Django를 선택한 이유  (0) 2016.09.27
Posted by 엘키 엘키

댓글을 달아 주세요

TCP 서버

  • 장점

    • 성능이 좋다. (=빠르다)

    • 커넥션 기반

    • stateful 기반

      • 가용성을 확보하기 어려움.

      • 코딩은 용이함.

    • notify가 가능. (클라이언트의 요청없이 서버가 패킷 전달)

  • 단점

    • 커넥션 기반이라, 커넥션 유실/복구 이슈

    • 로직간 결합도가 높아지는 경우가 자주 발생한다.

    • 서버 크래시에 대한 높은 리스크.

웹 서버

  • 장점

    • stateless 기반

      • 가용성 확보가 쉬움.

      • state는 모두 db에 존재.

    • 오픈소스 프레임워크가 많고, 검증되어있음.

    • 프레임워크 내에서도, 다양한 기능들이 오픈소스로 배포되고 쉽게 사용 가능.

    • 로직간 결합도가 낮다.

      • state가 없음으로

    • 서버 크래시에도 큰 장애는 없다.

      • 어지간해서는 서버 크래시도 없다.

        • 부하로 인한 timeout이나, 스크립트 오류가 발생할 뿐.

  • 단점

    • 모든 데이터는 요청마다 db를 조회해야해서 성능이 떨어진다.

    • notify가 어려움. (1-request, 1-response 구조)

    • 다른 피어와 통신용으로 사용하기 위해선 polling이 필요하다. [like ajax]


Posted by 엘키 엘키

댓글을 달아 주세요

Django

  • 장점

    • 굉장히 쉽게 배울 수 있는 프로그램 언어인 Python을 기반으로 한다.

    • 인증, 관리와 같이 거의 대부분의 사이트에서 사용하는 기능들이 기본 모듈로 제공된다.

    • 성공적인 도입 사례가 있습니다.(Instagram 등)

    • 높은 코드 완성도를 유지할 수 있다.

      • python의 강제된 indent가 코드 완성도에는 일조함.

    • IDE 지원이 훌륭한 편이다.(Pycharm, Visual Studio 등)

    • AWS, Google Cloud, Azure등에서 전폭적으로 초기 단계부터 지원한 프레임워크다.

      • deploy 및 운용에 대한 개발 비용을 크게 아낄 수 있다.

  • 단점

    • 한글 문서가 아주 풍부한 편은 아니다.

    • typeless 언어의 약점은 그대로 보유하고 있다.

    • python에 대한 높은 이해도가 필요하다.

      • Django는 문제를 python으로 해결하는 편이다. (프레임워크 특화 기능보다)

    • 성능 문제에서 자유롭지 못하다.

      • python은 ruby보다 빠를 뿐이다.

        • Django도 rails보다 빠를 뿐이다.

node.js

  • 장점

    • V8 엔진을 기반으로 한 성능이 뛰어납니다.

    • 오픈소스 문화권하에 있어서만은 아닌, 풍부한 모듈 지원. (유독 많다. 그것도 짧은 기간내에 급속히 증가)

    • C++로 필요한 모듈 작성 가능.

    • 싱글스레드, 비동기 IO 처리에 기반한 빠른 속도

    • 파일 I/O나 네트워크 처리를 이벤트 드리븐 방식으로 처리하기 때문에 빠른 처리가 가능함

    • CPU의 대기시간을 최소화 할 수 있음.

    • CPU 부하가 적고, 많은 커넥션을 동시에 처리해야 하는 구조에 적합.

    • 자바스크립트를 이용해서 개발할 수 있기 때문에 프론트엔드 개발자의 진입장벽이 낮음.

    • 기존 Java 서버에 비해 생산성이 높음

  • 단점

    • 싱글스레드 모델이기 때문에 하나의 작업에 시간이 오래걸리면 시스템 전체의 성능이 급격하게 떨어짐

    • 에러가 발생할 경우 프로세스 자체가 죽어버리므로 주의해야 함(watch dog 등으로 처리 가능)

    • 멀티코어 활용을 위해서 cluster 모듈을 이용해야 하고, 세션을 공유할 경우 부가적인 작업이 필요함

    • 불편한 비동기 프로그래밍 모델

      • 다음 할 일을 계속 콜백(callback) 함수로 넘기는 스타일로 코딩을 하다 보니 Pyramid of Doom이라 불리는 중첩 코드가 나오기 쉽상.

      • 이 문제를 해결하기 위해 비동기 제어 흐름을 좀 더 쉽게 표현하기 위한 async 모듈, underscore 등도 사용했지만, 이러한 프로그래밍 스타일은 Django나 Ruby on Rails에 비교해서 코드의 가독성을 현저히 떨어진다.

    • 초급 프로그래머라도 쉽게 할 수 있다 얘기는 거짓말.

      • 학습 난이도가 높은 편이다.

    • 시스템 관리자에게 쉽지 않은 아키텍쳐.

    • 자바스크립트로 로직을 구현하는 것은 어울리지 않다.

      • typeless 언어가 가져야하는 코드 가독성이 javascript는 부족하기 때문.

rails

  • 장점

    • ruby언어의 장점을 근간으로한 뛰어난 가독성, 그리고 표현력.

    • twitter, github, redmine 이라는 성공적인 도입 사례.

    • 검증된 빠른 개발 속도.

      • rails로 서비스를 개발한 후, 서비스 트래픽이 높아지는 단계에서 다른 플랫폼으로 갈아타는 사례가 많다는 것이 이를 입증함.

    • MVC 모델을 온전히 구현하고 있다.

    • github로 공개된 기능 패키지 수 3위 권을 다 년간 유지하고 있다.

      • 가져다 쓸 수 있는 기능이 아주 많다는 의미.

  • 단점

    • 비동기 API가 너무나 부족함.

    • GIL과 부족한 비동기 API로 인한 성능 이슈가 크게 대두 됨.

      • python 보다도 느림

        • 성능 문제로 인한 최적화 한계를, 다른 플랫폼으로 풀었다는 것은, rails의 미래에 대한 큰 숙제다.

      • 이로 인해, 고도화 과정이 반드시 필요하며, 고도화 과정은 rails 이외의 영역에 대한 높은 이해도가 필요한 경우가 많다.

    • 과도한 수준의 추상화로, 원리를 이해하는 데에는 여타 플랫폼보다 더 큰 시간이 든다.

asp.net

  • 장점

    • C# 사용 가능

    • Visual Studio 위에서 개발 가능

    • MVC 패턴을 제대로 지원함.

      • Model, View, Controller로 프로그램이 분할되어 복잡성을 다루기 쉬워집니다.

      • ViewState, 서버 기반 폼(server-based form)을 사용하지 않아서, Web 응용 프로그램에 대한 완전한 제어를 원하는 개발자들에게 이상적인 환경입니다. (WebForm에 비해서 MVC는 추상화의 수준이 낮습니다. WebForm의 경우, WebForm만 알아도 어떻게든 돌아가는 Website를 만들 수 있지만, MVC는 그게 안 됩니다. 그러다 보니 1강에서처럼 그렇게 많은 선수 과목이 필요하게 되었습니다. )

      • Website의 흐름을 마음대로 제어할 수 있습니다. 과거 WebForm에서는 blog.net/posts/23 같은 주소로 글을 접근할 수 있게 하려면, IIS를 건드려야 했지만, MVC에서는 매우 쉽게 이 문제를 해결할 수 있습니다.

      • 테스트 주도 개발(Test-Driven Development, TDD)을 하기에 좋습니다.

      • 큰 팀에서 많은 개발자와 디자이너들이 Web 응용 프로그램에 높은 수준의 제어를 원한다면 추천할만합니다.  

  • 단점

    • 윈도우 서버 위에서만 온전히 동작.

    • 개발자 풀이 좁음.

    • 오픈소스권 문화가 아니라서 MS가 제공하지 않는 기능은 .NET 플랫폼 지원언어로 개발해야함.

spring [java]

  • 장점

    • 크기와 부하의 측면에서 경량.

    • 제어 역행(IoC)이라는 기술을 통해 애플리케이션의 느슨한 결합을 도모.

    • 관점지향(AOP) 프로그래밍을 위한 풍부한 지원을 함.

    • 애플리케이션 객체의 생명 주기와 설정을 포함하고 관리한다는 점에서 일종의 컨테이너(Container)라고 할 수 있음.

    • 간단한 컴포넌트로 복잡한 애플리케이션을 구성하고 설정할 수 있음.

    • 대한민국 전자정부 표준 프레임워크의 기반 기술

  • 단점

    • 설정이 복잡한 편이다.

    • 컴포넌트가 다양한 건 사실이나, 컴포넌트로 존재하지 않는 기능을 사용할 경우에 개발 공수가 크다.

play [play]

  • 장점

    • 국내의 많은 교육기관에서 가르치고 있는 Java 기반 프레임워크인 만큼 누구나 쉽게 접근할 수 있습니다.

    • 웹 서버를 내장하고 있어 별도로 서버를 세팅할 필요가 없다.

    • 일반적인 Java 어플리케이션은 빌드하는데 굉장히 오랜 시간이 소모되지만, Play의 경우 변경된 내역에 대해 자동으로 빠르게 빌드하기 때문에 개발 및 테스트 시간을 크게 줄일 수 있습니다.

    • 가장 훌륭한 IDE인 Eclipse와 Intellij에서 Play!를 완벽하게 지원합니다.

  • 단점

    • 한글로 된 문서가 거의 없습니다. 진행중이던 문서화 작업이 중단되었으며, 관련 서적과 블로그를 통해 제공되는 강좌들은 오래되어 Play! 최신 버전과 맞지 않습니다.

    • 번들이라고 하는 서드파티 모듈들이 많지 않고 그나마 있는 것들도 프레임워크 버전에 맞춰서 버전업이 되지 않아 활용 가치가 매우 낮습니다.

    • Twitter의 Rails나 Instagram의 Django와 같은 성공적인 도입 사례가 아직까지 없습니다.

    • Java와 Scala를 골라서 개발할 수 있다고 이야기하지만 실제로 Scala를 공부하지 않으면 개발을 진행하기 어려울 정도로 Scala의 비중이 높습니다.

code igniter [php]

  • 장점

    • PHP 기반 full stack framework 중에서 성능이 매우 뛰어납니다.(Phalcon과 Slim은 경량 프레임워크)

    • 서비스가 성장하여 개발 인력을 늘려야 할 때 비교적 쉽게 관련 기술 보유자를 구할 수 있습니다.

  • 단점

    • RESTful 서비스에 적합한 구조가 아닙니다.

    • Session 처리가 안정적이지 않고, DB Session 만을 지원하기 때문에 File이나 Memory 기반의 Session을 사용하기 위해서는 별도의 개발이 필요합니다.

    • PHP 언어 특성상 구조적으로 깔끔한 코드 작성이 어렵습니다.

    • ORM 기반의 Model이 아니라 코드를 통해 스키마를 파악하기 어렵습니다.


'Web > Django' 카테고리의 다른 글

Django Celery 사용법  (0) 2016.09.27
Django 사용법 정리  (0) 2016.09.27
웹서버 중에서 Django를 선택한 이유  (0) 2016.09.27
Posted by 엘키 엘키

댓글을 달아 주세요

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

댓글을 달아 주세요

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

댓글을 달아 주세요

이전버튼 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          

글 보관함