Redmine이 자랑하는 대표적인 기능 중 하나가 바로 간트(Gantt) 차트이다.
디자인이 비교적 예쁜 편이라서 많은 사람들이 그림파일로 착각을 하는 경우도 있지만 HTML로 만들어져 있다.


기특하게도 Redmine은 내보내기 기능도 제공을 해준다.
PDF 파일로도 내보내기가 가능하고, PNG 파일로도 내보내기가 가능하다.

그런데, PDF 파일 내보내기의 경우엔 별 문제가 없지만,
PNG 파일 내보내기의 경우에는 한글 출력에 문제가 있다.


한글 부분이 ????? 로 출력이 되는 것이다.
이는 한글 폰트 설정으로 인한 문제이다.

폰트 설정에 대한 내용은 [ config/ ] 디렉토리에 있는 [ configuration.yml ] 파일에서 셋팅을 해야 한다.

기존부터 사용하고 있었다면 그 파일을 그대로 사용하면 되고,
사용하고 있던 파일이 없다면 example 파일을 이용하면 편리하다.

$ cd /srv/install/redmine/config/
$ mv ./configuration.yml.example ./configuration.yml

이제 폰트를 셋팅해보자.

$ cd /srv/install/redmine/config/
$ nano ./configuration.yml

파일의 밑 부분을 살펴보면 [ rmagick_font_path: ] 부분이 있다.
여기에 사용할 폰트의 경로를 적어주면 된다.

rmagick_font_path: /usr/share/fonts/truetype/nanum/NanumGothic.ttf

그리고 Apache2를 재시작해주자.

$ sudo service apache2 restart

그리고 다시 PNG 내보내기를 하면 한글이 잘 출력된다는 것을 확인할 수 있다.


이것으로 해결 끝~

반응형

책상을 정리하다가 발견한 Nexus S !
레퍼런스 폰으로써 정말 훌륭한 역할을 수행한 멋진 스마트폰인데...

이 놈의 생명을 한 번 연장해볼까?! 하는 생각이 불끈 !!!!
그래서 구글링을 해보니... 정식으로 젤리빈 4.1.2 버전까지는 제공이 되었단다.

와우! 아직 빠지는 놈이 아니구나 !!!

그래서 그냥 바로 메뉴를 통해서 업데이트를 시도해보았으나.... 4.1.1 버전에서 더 이상 새로운 버전이 없단다.
어떻게든 업그레이드 시도를 해보기로 결정 !!!



01. 넥서스 S (Nexus S)

   - 모델명 : GT-9020, SHW-M200
   - 발표일 : 2010년 11월 15일
   - 출시일 : 2010년 12월 16일
   - 출시버전 : 진저브레드 2.3.1
   - 최종버전 : 젤리빈 4.1.2
   - 홈페이지 : http://www.google.com/nexus/s/



02. 젤리빈 이미지 다운로드

   - https://developers.google.com/android/nexus/images


   - 4.1.2 의 Link 를 클릭하면 바로 다운로드가 된다.



03. USB Driver 다운로드 & 설치

   - http://www.samsung.com/us/support/owners/product/GT-I9020FSTTMB

   - UNLOCK, 공장초기화, 롬 업데이트 등을 하기 위해서 반드시 필요하다.
   - Nexus S 전용 드라이버는 아니다. 삼성 USB 통합 드라이버이니 이미 설치된 분들은 생략 가능 !!



04. JDK 설치

   - http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

   - Android SDK를 사용하기 위해서 필요하다.



05. Android SDK

   - http://developer.android.com/sdk/index.html
   - fastboot 기능이 필요한데, 이는 Android SDK에 들어있다.

   - 능력자 분들이 올려놓은 fastboot 부분만 쏙 빼서 압축한 파일들이 검색이 되지만,
   - 어떤 것이 믿을만한 것인지 original을 찾기가 어려워서 Android SDK를 가지고 작업을 하겠다.

   - 용량이 좀 크지만 (400MB 이상) 해로운 것은 아니니(^^) 다운받은 후 압축을 풀자.



06. Drivers

   - Android SDK 압축을 푼 후 SDK Manager.exe 를 실행하자.
   - Packages의 Extras에 있는 Google USB Driver 선택 후 Install 1 package ... 클릭하자.



07. Driver EDIT

   - EDIT Andrdoid SDK\sdk\extras\google\usb_driver\android_winusb.inf

...

 [Google.NTx86]

;Google Nexus S
...
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4E20

...

[Google.NTamd64]

...

;Google Nexus S
...
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4E20

...




08. Driver 설치

   - Nexus S 전원을 끈 후 컴퓨터와 연결을 하고, 볼륨업 버튼과 파워버튼을 동시에 눌러서 부트로더로 들어가자.
   - 드라이버 선택 창이 나오면 방금 작업한 것으로 선택을 하자.

   - [ LOCK STATE - LOCKED ] 으로 되어있는 것을 Nexus S 화면에서 확인할 수 있을 것이다.



09. 부트로더 언락 (bootloader unlock)

   - cmd 실행 후 Andrdoid SDK\sdk\platform-tools 경로로 이동하자.

>  fastboot oem unlock

   - Nexus S 화면이 바뀔 것이다.
   - 거기에서 YES를 선택하면 이제 모든 데이터가 사라지며 unlock이 된다.
   - 볼륨 업/다운 버튼으로 이동하고 파워 버튼으로 선택하면 된다.

   - 간단하다. 이제 화면을 보면 빨간색으로 [ LOCK STATE - UNLOCKED ]이 보일 것이다.



10. 파일 준비 & 복사

   - 젤리빈 이미지 다운로드 받은 것을 압축을 풀자.
   - tgz로 압축되어 있으니... 7-z 등의 프로그램을 이용해서 압축을 풀자.
   - 빵집에서는 잘 안될 수도 있다.

   - Andrdoid SDK\sdk\platform-tools 경로 밑에다가 복사해 놓는 것이 편하다.


11. bootloader 플래싱

   - cmd 실행 후 Andrdoid SDK\sdk\platform-tools 경로로 가자

> fastboot flash bootloader ./soju0jzo54k/bootloader-crespo-i9020xxlc2.img
> fastboot reboot-bootloader

   - Nexus S가 재부팅될 것이다.



12. 라디오 플래싱

   - 계속 플래싱을 진행하자.

> fastboot flash radio ./soju0jzo54k/radio-crespo-i9020xxki1.img
> fastboot reboot-bootloader



13. 이미지 등록

   - 이제 메인이다!

> fastboot -w update ./soju0jzo54k/image-soju-jzo54k.zip

   - 모두 마치면 Nexus S가 재부팅 된다.



이제 끝이다. 새로운 생명을 얻은 Nexus S를 가지고 멋진 스맛폰 생활을 하자 !!!
반응형

'지름생활 > Phone' 카테고리의 다른 글

NEC Terrain (방수폰)  (0) 2019.09.21
Galaxy Note 8 통신사 변경하기  (20) 2019.02.09


Python script 파일을 만들어서 실행을 하다보면,
script 파일이 지금 현재 어느 경로에 위치하고 있는지 알고 싶은 경우가 있다.

이럴 때 사용할 수 있는 좋은 예약어가 하나 있다.

__file__


현재 실행 중인 스크립트 파일 이름을 의미한다.
단순한 파일 이름이 아니라 실행할 때 사용한 경로를 포함한 파일 이름이다.

테스트를 위해서 [ dir.py ]라는 이름의 Python script 파일을 다음 내용으로 생성해보자.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import os

if __name__ == "__main__":

        print "__file__                                                       = " + __file__
        print "os.path.dirname(__file__)                              = " + os.path.dirname(__file__)
        print "os.path.realpath(__file__)                              = " + os.path.realpath(__file__)
        print "os.path.realpath( os.path.dirname(__file__) )   = " + os.path.realpath( os.path.dirname(__file__) )
        print
        print "os.getcwd()                                                 = " + os.getcwd()
        print
        print "os.path.basename( os.path.realpath(__file__) ) = " + os.path.basename(__file__)


실행을 해보면 다음과 같다.

$ pwd
/srv/workspace/barerepo

$ python ./dir.py
__file__                                                       = ./dir.py
os.path.dirname(__file__)                              = .
os.path.realpath(__file__)                              = /srv/workspace/barerepo/dir.py
os.path.realpath( os.path.dirname(__file__) )   = /srv/workspace/barerepo

os.getcwd()                                                 = /srv/workspace/barerepo

os.path.basename( os.path.realpath(__file__) ) = dir.py


dirname 은 상대경로를 알려주고 realpath 는 절대경로를 알려준다.
 
[ __file__ ] 예약어를 통해서 현재 경로를 확인하는 것에 대해서 살펴보고 있지만,
사실 지금 현재 경로를 알고 싶을 때에는 [ os.getcwd() ] 명령이 훨씬 더 많이 사용된다.

경로에서 파일이름만 뽑아내고 싶을 때에는 [ os.path.basename() ] 명령을 사용하면 된다.

반응형

만날 살펴보다가 꼭 신경안쓸 때 새로운 버전이 나온다.

• Defect #12650: Lost text after selection in issue list with IE
• Defect #12684: Hotkey for Issue-Edit doesn't work as expected
• Defect #13405: Commit link title is escaped twice when using "commit:" prefix
• Defect #13541: Can't access SCM when log/production.scm.stderr.log is not writable
• Defect #13579: Datepicker uses Simplified Chinese in Traditional Chinese locale
• Defect #13584: Missing Portuguese jQuery UI date picker
• Defect #13586: Circular loop testing prevents precedes/follows relation between subtasks
• Defect #13618: CSV export of spent time ignores filters and columns selection
• Defect #13630: PDF export generates the issue id twice
• Defect #13644: Diff - Internal Error
• Defect #13712: Fix email rake tasks to also support no_account_notice and default_group options
• Defect #13811: Broken javascript in IE7 ; recurrence of #12195
• Defect #13823: Trailing comma in javascript files
• Patch #13531: Traditional Chinese translation for 2.3-stable
• Patch #13552: Dutch translations for 2.3-stable
• Patch #13678: Lithuanian translation for 2.3-stable

마이너 업데이트는 새로운 기능이 추가없이 Defect 수정 위주이다.

개인적으로 그닥 피부에 와닿는 부분은 없지만... 업데이트는 해야지..... ^^



기존 2.3.0 버전 설치는 다음 포스팅을 참고해서 진행했다.

   - http://whatwant.tistory.com/553



1. PostgreSQL

   - 제일 중요한 데이터베이스를 혹시 모르니 백업을 해두자.

$ sudo su - postgres

$ pg_dump -Fc --file=redmine_20130503.sqlc redmine



2. Redmine 압축파일

   - 최신 버전의 Redmine을 다운로드 받고 압축을 풀자.

$ cd /srv/install/

$ wget http://rubyforge.org/frs/download.php/76933/redmine-2.3.1.tar.gz
$ tar zxvf redmine-2.3.1



3. Files 복사

   - 파일들과 플러그인들을 복사하자.

$ cd /srv/install/redmine-2.3.1/

$ sudo cp /srv/install/redmine-2.3.0/config/database.yml ./config/
$ sudo cp /srv/install/redmine-2.3.0/config/configuration.yml ./config/  (없을 수도 있다)
$ sudo cp -r /srv/install/redmine-2.3.0/files/* ./files/
$ sudo cp -r /srv/install/redmine-2.3.0/plugins/*  ./plugins/



4. Upgrade

   - 이제 업그레이드 작업 진행하면 된다.

   - Ruby 권한 관련 이슈가 있어서.... 아래 진행은 애초 설치 진행 時 (sudo su -) 권한으로 진행을 한 상황이다.

$ sudo su -
$ cd /srv/install/redmine-2.3.1

$ bundle install
$ rake generate_secret_token
$ rake db:migrate RAILS_ENV=production
$ rake redmine:plugins:migrate RAILS_ENV=production
$ rake tmp:cache:clear

$ rake tmp:sessions:clear




5. 권한 설정

   - 중요한 권한 설정을 해주자.

$ sudo su -
$ cd /srv/install/redmine-2.3.1

$ chown -R www-data:www-data files log tmp public
$ chmod -R 755 files log tmp public/plugin_assets
$ chown -R www-data:www-data ./config/database.yml
$ chmod 600 ./config/database.yml



6. 웹 설정

   - 링크 잡아주고 재시작하자.

$ sudo su -
$ cd /var/www/

$ ln -s /srv/install/redmine-2.3.1/public ./redmine
$ service apache2 restart



접속 성공~!!!

반응형

Enlightenment 에 대해서 알아보던 중 특이한 터미널을 하나 발견했다.
생긴 것만으로도 아주 특이한데, 그 소개를 보면 더욱 더 특이하다 못해 별나다.

"Terminology is a new terminal emulator. It started life during a vacation in Thailand in June of 2012. So it is young and fresh, so it's not perfect, but it's getting there."

칼슨 하이츨러(Carsten Haitzler)라는 아저씨도 리누즈 토발즈나 뭐 그런 아저씨들 같은 긱(Geek)인가 보다. 왜 휴가까지 가서 이런걸 만드는건지...

Enlightenment를 시작했고 리딩을 한 개발자이고, Raster 또는 Rasterman으로 오픈 소스 커뮤니티에서 널리 알려진 칼슨 하이츨러는 원래 Red Hat에서 CORBA, Xlib, GTK+ 라이브러리 개발을 했었다고 한다.

최근 2010년부터는 Tizen과 관련해서 Samsung과 일을 하고 있다고 한다. (Tizen에서 EFL을 사용하고 있다)

뭐 여하튼... 이 특이한 터미널 '터미놀로지 (Terminology)'는 이런 배경으로 태어났다 !
근데, 뭐가 특이하냐고?!



칼슨 하이츨러가 직접 올린 동영상이다.


1. 참고 사이트

   - http://www.enlightenment.org/p.php?p=about/terminology&l=en
      ▷ 공식 홈페이지
   - http://seoz.egloos.com/3940530
      ▷ EFL 관련 자료를 찾다보면 계속 발견(?)되는 블로그다.



2. 다운로드

   - EFL 관련해서 좀 안타까운 점은 자료 찾기가 쉽지 않다는 것이다. 아직은 사용자 층이 넓지 않은 듯...
   - 그리고 또 하나 설치 및 사용 관련한 자료는 더 부족하다는 점이 아쉽다 !!!

   - Terminology도 설치 방법에 대한 가이드가 보이지를 않았다. 이런... 난 컴맹이란 말이다 !!!!

   - 일단 소스 코드를 다운로드 받아보기로 했다.
   - 설치 경로는 개인적인 취향으로 [ /srv/install/ ] 밑으로 했다.

$ cd /srv/install/
$ git clone git://git.enlightenment.org/apps/terminology.git



3. 빌드 & 설치

   - INSTALL 파일에 설치 방법이 잘 쓰여져 있지만, 잘 안된다는...
   - 하지만, 뭐 그냥 일반적인 방법으로 하면 된다는 것은 확인이 되었으니 !

$ cd /srv/install/terminology/

$ ./autogen.sh
$ make
$ sudo make install

   - 뭐 일반적이기에 굳이 가이드를 해줄 필요성을 못느꼈다보다.


   - [ 프로그램 - System Tools - Terminology ] 메뉴를 확인할 수 있다.



4. Terminology

   - 정말 멋져보인다.


   - 터미널 화면 위에서 마우스 오른쪽 버튼을 누르면 위 스크린샷과 같은 메뉴가 뜬다.


   - About 메뉴만 눌러봐도 Terminology의 매력을 듬뿍 느낄 수 있다. 정말 멋지다 !!!


   - Settings 메뉴를 누르면 위와 같은 화면이 나온다. 적당히 입맛에 맞게....^^

   - EFL에 대해서 눈꼽만큼도 아는 것이 없는 입장에서 할말은 아니지만,
     EFL의 매력은 사용자가 직접 손쉽게 멋진 화면을 꾸밀 수 있도록 해주는 것에 있는 것 같다.
     하지만, 더 매력적인 것은 그냥 기본적으로 화면이 왠지 매트릭스 같은 느낌을 주는 것이 그냥 멋지다 !!! ^^

   - Terminology에서 글자만 몇 개 타이핑 해보면... 커서의 모양이... 쿨~!!!

   - 그런데, 동영상에서 보이는 그런 기능들이 잘 안된다.
   - 능력이 없어서 이런걸 해결하기 위해선 시간이 좀 많이 투자 될 것 같아 지금은 여기까지만~ ^^
   - 소스 코드에 있는 README 파일을 좀 더 읽어봐야겠다.

반응형

회사에서 EFL 관련 이야기를 듣다가 갑자기 필자도 한 번 사용해보고 싶어졌다.
손쉽고 예쁘게 경험해볼 수 있는 EFL이 무엇이 있을까 하다가 생각난.... 윈도우 매니저~ Enlightenment !!!

당연하게도 Ubuntu에서도 사용해볼 수 있다.
그리고 친절하게도 패키지(apt-get)를 이용해서 설치할 수 있다.

하지만, 개인적인 취향으로 소스코드를 통해서 Enlightenment를 설치해보도록 하겠다.
능력도 없지만 괜히 잘난 개발자가 된 기분이 좋아서 유난히 소스코드 설치를 좋아하는 것 같다.

솔직히 단순히 Enlightenment만 사용하고자 하는데 아래처럼 설치를 진행하는 것은 분명 오버이긴 하다 ^^


( 가장 많이 참조한 블로그 포스팅 : http://seoz.egloos.com/3855400  )


1. Enlightenment

   - http://www.enlightenment.org/
   - 단순한 윈도우 매니저가 아니라 아름다운 사용자 인터페이스를 만드는데 도움을 주는 모든 것을 제공해준다고 한다.
   - EFL의 시작은 윈도우 매니저인 Enlightenment이지만,
     지금은 윈도우 매니저를 개발하기 위한 라이브러리인 EFL이 더욱 더 덩치가 커져버렸다고 한다.



2. E17

   - 2004년도부터 개발되기 시작한 E17은 2013.04.30 현재까지도 계속 개발되고 있다.
   - 지속 배포 방식인 Rolling Release 방식으로 개발 & 배포되고 있다.
   - 2013.05.01 01:12 현재 최신 버전은 0.17.2.1 이다.



3. 필요 패키지

   - 앞으로 진행할 빌드 時 필요한 패키지는 아래와 같다. (Ubuntu 12.04 환경)

$ sudo apt-get install build-essential automake libtool ccache zlib1g-dev libfreetype6-dev libdbus-1-dev liblua5.1-0-dev g++ libxext-dev libxrender-dev libpng12-dev libxrandr-dev libfontconfig1-dev libxcb-shape0-dev libfribidi-dev libcurl4-openssl-dev libxcb-keysyms1-dev libjpeg-dev gettext autopoint libgif-dev libtiff4-dev libxp-dev libxtst-dev libgl1-mesa-dev libxinerama-dev libxdamage-dev libxcursor-dev libglib2.0-dev libxcomposite-dev libxss-dev libpulse-dev libsndfile-dev libudev-dev libblkid-dev libmount-dev libgstreamer0.10-dev check libgstreamer-plugins-base0.10-dev libvlc-dev

   - Ubuntu 12.10 환경에서는 아래와 같다고 한다.

$ sudo apt-get install build-essential automake libtool ccache zlib1g-dev libfreetype6-dev libdbus-1-dev liblua5.1-0-dev g++ libxext-dev libxrender-dev libpng12-dev libxrandr-dev libfontconfig1-dev libxcb-shape0-dev libfribidi-dev libcurl4-openssl-dev libxcb-keysyms1-dev libjpeg-dev gettext autopoint libgif-dev libtiff5-dev libxp-dev libxtst-dev libgl1-mesa-dev libxinerama-dev libxdamage-dev libxcursor-dev libglib2.0-dev libxcomposite-dev libxss-dev libpulse-dev libsndfile-dev libudev-dev libblkid-dev libmount-dev libgstreamer0.10-dev check libgstreamer-plugins-base0.10-dev libbullet-dev libvlc-dev



4. EFL 소스 코드 다운로드

   - EFL 버전 관리 시스템은 본래 SVN이었지만 최근 GIT으로 변경을 하였다.
   - 따라서 당연히 소스 코드 다운로드를 위해서는 GIT이 설치되어 있어야 한다.
   - 설치 경로는 개인적인 취향으로 [ /srv/install/ ] 밑에 위치시켰다.

$ cd /srv/install/efl/

$ git clone git://git.enlightenment.org/core/efl.git
$ git clone git://git.enlightenment.org/core/enlightenment.git
$ git clone git://git.enlightenment.org/core/elementary.git
$ git clone git://git.enlightenment.org/core/evas_generic_loaders.git
$ git clone git://git.enlightenment.org/core/emotion_generic_players.git

   - 용량 꽤 크다.



5. make

   - 이제 설치해보자.

$ cd /srv/install/efl/

$ ./efl/
$ ./autogen.sh --disable-physics
$ make
$ sudo make install
$ sudo ldconfig

$ cd ../elementary/
$ ./autogen.sh
$ make
$ sudo make install
$ sudo ldconfig

$ cd ../evas_generic_loaders/
$ ./autogen.sh
$ make
$ sudo make install
$ sudo ldconfig

$ cd ../emotion_generic_players/
$ ./autogen.sh
$ make
$ sudo make install
$ sudo ldconfig

$ cd ../enlightenment/
$ ./autogen.sh
$ make
$ sudo make install
$ sudo ldconfig



6. xsession

   - 데스크탑 세션으로 사용하기 위해서는 파일을 등록해야 한다.

$ sudo cp /usr/local/share/xsessions/enlightenment.desktop /usr/share/xsessions/

   - 이제 Enlightenment를 사용할 수 있다.


   - 로그아웃을 하고나서 나오는 화면에서 오른쪽 위에 있는 동그란 부분을 클릭해보자.


   - Enlightenment를 선택할 수 있다 !!!
   - 이렇게 하면... 초기 실행이기 때문에 환경 설정 화면이 나온다.


   - 당연히(?) 한국어를 선택하면 된다.


   - 키보드 설정에서도 Korean을 고를 수 있다 !!!


   - 터치스크린도 지원한다 !!! 하지만 표준은 그냥이라는거...


   - 제목 표시 크기를 선택하면 된다.


   - 마우스 올리기를 통해서 창 활성화를 할 수도 있긴 한데....


   - 당연히 설치를 해야한다...


   - 하드웨어 가속 설정을 하고 싶은데, 필자의 경우엔 아무 것도 선택이 안되었다.


   - 업데이트 활성화가 싫은 경우라면 모르겠지만...


   - 작업 표시줄도...


   - 드디어 Enlightenment 윈도우 매니저가 떴다.
   - 왼쪽 마우스 버튼 클릭으로 위 스크린샷과 같이 메뉴가 뜬다.


좀 다른 테마라는 느낌은 있지만 아직은 설치만 해서는 정확히 뭐가 어떻게 다른지 잘 모르겠다.
설정도 좀 바꿔보고 뭔가 좀 사용을 해봐야 Enlightenment의 매력을 알 수 있을 것 같다.

일단 이번에는 여기까지만~

반응형

블로그의 포스트들을 살펴보다가 예전에 스크립만 해놓은 것 중 하나를 발견하게 되었다.
버전 관리 도구의 브랜치를 3D로 보여주는 도구에 대한 포스팅이 바로 그것인데...


   □ Mono Success Story: Plastic
      - http://tirania.org/blog/archive/2006/Sep-05-2.html



3D 예찬론자는 아니지만, 아... 정말 아름답다 !!!

해당 포스팅을 보면 알겠지만, 2006년도 당시에 저 도구는 시중에서 구할 수 있는 것이 아니었다.
그래서 그냥 저런 View를 제공하기 위해서 개발을 하는 곳이 있구나....라는 생각만 할 뿐이었다.

그러다가 또 하나의 아티클을 발견하게 되었다.

   □ LDRA and Codice Software launch Agile development framework
      - http://johndayautomotivelectronics.com/ldra-and-codice-software-launch-agile-development-framework/


어?! 예전에 비해서 상당히 더 세련되어진 모습으로 등장을 했다 !!!
그냥 시험삼아서 개발을 했던 것이 아니라 계속 이어지고 있었던 것이다.


그래서 계속 알아본 결과.... 예쁜 인터페이스로 유명한 plasticscm (http://www.plasticscm.com/) 에서
제공해주고 있는 기능 중 하나라는 것을 확인할 수 있었다.

게임패드를 이용한 3D Version Tree 인터페이스를 한 번 구경해보도록 하자.




"Plastic SCM"이라는 도구가 국내에서는 그다지 지명도가 없지만,
아는 분들은 다 알고 있는 조금은 매니악한 분산형 버전 관리 도구이다.

현재 버전도 4.1 까지 나와있는 나름 오랜 시간동안 예쁨 받고 있는 좋은 버전 관리 도구 이다.

조금 안타까운 점은 돈 많은 회사가 아니라서 그런지 아니면 라인이 좋지 않아서인지
홈페이지에 접속이 시원시원하게 되지를 않는다 !

지금 집에서 접속을 하는데.... 아예 접속이 되지를 않는다.....
너무 예전에 테스트해봐서 기억이 나질 않아, 홈페이지에서 도구 소개글을 찾아보려고 했는데...


뭐 여하튼 이런 것도 있다는 것을 소개 한 번 해봤다~!!

많은 개발자가 다양한 형태로 머지를 하며 개발을 해서 version tree가 복잡할 때
이런 3D로 보여주게 되면 시각적으로 상당히 편리할 수도 있을 것 같다.
반응형

시스템을 운영하다가 사고가 발생하면 가장 많은 도움을 받는 것이 바로 Log 파일이다.
Redmine의 경우에도 당연히 Log 파일을 만들어주고 있다.

그런데, 관심을 두지 않고 있어서 별 문제가 없어 보이지만 지금 현재 Log 파일을 살펴보면
엄청난 용량에 무의미한 데이터를 계속 저장하고 있을 수도 있다.


1. Redmine's Log File

   - 기본 경로는 redmine 설치 디렉토리 밑에 ./log/ 에 생성이 된다.
   - 필자의 경우 [ ./log/production.log ] 파일로 생성이 되고 있다.


2. Log contents

   - 아무런 설정 변경 없이 그냥 사용할 경우 어떤 내용이 채워지고 있을까?
   - [ cat ./log/production.log ]

Started GET "/redmine/" for 10.0.2.2 at 2013-04-28 18:31:27 +0900
Processing by WelcomeController#index as HTML
  Current user: anonymous
  Rendered news/_news.html.erb (1.3ms)
  Rendered welcome/index.html.erb within layouts/base (3.0ms)
  Rendered plugins/redmine_banner/app/views/banner/_project_body_bottom.html.erb (0.0ms)
Completed 200 OK in 26ms (Views: 9.5ms | ActiveRecord: 4.3ms)
Started GET "/redmine/login" for 10.0.2.2 at 2013-04-28 18:31:29 +0900
Processing by AccountController#login as HTML
  Current user: anonymous
  Rendered account/login.html.erb within layouts/base (3.6ms)
  Rendered plugins/redmine_banner/app/views/banner/_project_body_bottom.html.erb (0.1ms)
Completed 200 OK in 13ms (Views: 9.7ms | ActiveRecord: 1.5ms)
Started POST "/redmine/login" for 10.0.2.2 at 2013-04-28 18:31:35 +0900
Processing by AccountController#login as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"Pe5aTLPaPSNRv6MX244+6cDZBU1JgcOtjdGm9bE3xis=", "back_url"=>"ht$
  Current user: anonymous
Failed login for 'admin' from 10.0.2.2 at 2013-04-28 09:31:35 UTC
  Rendered account/login.html.erb within layouts/base (1.7ms)
  Rendered plugins/redmine_banner/app/views/banner/_project_body_bottom.html.erb (0.1ms)
Completed 200 OK in 8ms (Views: 6.6ms | ActiveRecord: 0.5ms)
Started POST "/redmine/login" for 10.0.2.2 at 2013-04-28 18:31:39 +0900
Processing by AccountController#login as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"Pe5aTLPaPSNRv6MX244+6cDZBU1JgcOtjdGm9bE3xis=", "back_url"=>"ht$
  Current user: anonymous
Successful authentication for 'admin' from 10.0.2.2 at 2013-04-28 09:31:39 UTC
Redirected to http://127.0.0.1/redmine/
Completed 302 Found in 6ms (ActiveRecord: 2.8ms)
Started GET "/redmine/" for 10.0.2.2 at 2013-04-28 18:31:39 +0900
Processing by WelcomeController#index as HTML
  Current user: admin (id=1)
  Rendered news/_news.html.erb (2.8ms)
  Rendered welcome/index.html.erb within layouts/base (5.1ms)
  Rendered plugins/redmine_banner/app/views/banner/_project_body_bottom.html.erb (0.0ms)
Completed 200 OK in 19ms (Views: 11.1ms | ActiveRecord: 3.6ms)

   - 에러만 기록되고 있는 것이 아니라 Redmine에서 이루어지는 모든 상황이 전부 기록되고 있는 것을 확인할 수 있다.
   - 그러다보니 Log의 크기를 감당하기가 쉽지가 않다.



3. Guide Document

   - Redmine에서 Log 관련 설정을 어떻게 해야하는지에 대한 내용은 다음에서 확인할 수 있다.
   - http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Logging-configuration

   - Log 파일에 대한 설정을 어떻게 해야하는지 확인하기 위해서 현재 사용하고 있는 Ruby 버전을 확인해보자.

 Environment:
  Redmine version                        2.3.0.stable
  Ruby version                             1.9.3 (i686-linux)
  Rails version                             3.2.13
  Environment                              production
  Database adapter                       PostgreSQL
Redmine plugins:

 $ ruby --version
ruby 1.9.3p392 (2013-02-22 revision 39386) [i686-linux]


   - Ruby v1.9.3 에서 Logger에 대한 도움말은 아래의 주소에서 찾아볼 수 있다.
   - http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger.html

   - Redmine에서 검색 결과로 나온 document도 있다.
   - http://www.redmine.org/boards/2/topics/25236




4. ./config/addional_environment.rb

   - Redmine의 config 디렉토리에 있는 설정 파일들 중 하나에서 Log에 대한 설정을 할 수 있다.

   - 우선 설정 파일을 만들자.

$ cd ./config/

$ cp ./additional_environment.rb.example ./additional_environment.rb

$ ls
additional_environment.rb          boot.rb                    environment.rb  locales            settings.yml
additional_environment.rb.example  configuration.yml.example  environments    preinitializer.rb
application.rb                     database.yml               initializers    routes.rb

   - 파일 내용을 보면 아래와 같다.

 $ cat ./additional_environment.rb
# Copy this file to additional_environment.rb and add any statements
# that need to be passed to the Rails::Initializer.  `config` is
# available in this context.
#
# Example:
#
#   config.log_level = :debug
#   ...
#

   - 아직은 주석밖에 없다. 그렇다는 말은 지금 현재는 default 설정으로 되어있다는 것이다.

   - 특별한 설정 없는 default 설정은 다음과 같은 값으로 되어있는 것과 같다고 한다.

 config.logger.level = Logger::INFO

   - 로그 파일을 분할을 한다거나 하는 설정은 전혀 없는 것이다. 이 부분에 대한 설정을 해보자.

config.logger = Logger.new('./log/production.log', 5, 1024000)
config.logger.level = Logger::ERROR

   - Logger.new 첫 번째 파라미터는 로그 파일 저장 위치이고,
   - 그 다음은 한 개의 로그 파일의 크기가 약 10MB가 되면 최대 5개로 분할되어 저장을 하라는 의미이다.
   - 로그 파일이 모두 채워지면 처음 만들어진 것부터 차례대로 삭제된다.

   - config.logger.level 에서 사용할 수 있는 옵션은 FATAL, ERROR, WARN, INFO, DEBUG 이다.
   - 기본 설정인 INFO의 경우 너무 많은 정보를 저장하기 때문에, ERROR 정도로 설정을 변경하는 것을 추천한다.


   - 이렇게 파일을 저장하고 Apache2를 재시작하면, 변경된 설정으로 Log가 남겨지게 된다.




결론만 보면 그냥 설정 파일 하나 추가해서 두 줄 추가하는 것 뿐이지만,
이번 기회에 Redmine의 Log에 대해서 정리한다는 생각으로 한 번 살펴봤다는 의미로 생각하면 되겠다.

반응형

+ Recent posts