참고 자료:

http://chrislaskey.com/blog/342/running-multiple-redis-instances-on-the-same-server/

http://makandracards.com/makandra/7965-run-multiple-redis-servers-on-ubuntu


작업 환경:

Ubuntu 12.04.4 LTS x86_64 / Xeon E5640 @ 2.67Ghz / 6 core / 4G

redis 2.8.7 x86_64


이번에 해외에 게임을 새로 퍼블리싱 하는데 CCU를 1분마다 체크해달라고 한다. 그런데 기존 코드를 크게 고치기엔 부담이 있어서 그냥 redis instance를 하나 더 띄워서 글로벌 키를 다 걸고 EXPIRE를 걸어서 DBSIZE만 반환해주면 되겠다, 라는 생각이 들어서 새 인스턴스를 띄우게 되었다.


굵은 글씨가 커맨드이니 따라하려면 굵은 글씨에 집중하자.



1. 설정 파일 복사

기존의 설정 파일을 복사해야 한다. 기존의 설정 파일은 /etc/redis/에 들어있다. 새 Redis 개체는 'redis-cache-server'이며, 기존의 서버는 'redis-server'로 명명하겠다.


cd /etc/redis/

sudo cp redis.conf redis-cache.conf

sudo vi redis-cache.conf


2. 설정 파일 편집

 복사한 redis-cache.conf 파일의 몇 가지를 수정해야 하는데 확인해 보자.별표가 찍혀있는 것은 해외 사이트에선 언급하진 않았지만 본인이 찝찝해서 바꾼 것.


 - pidfile

  pid가 기록될 폴더이다. 내 환경 기준으로 /var/run/redis/redis.pid로 되어있다. 이걸 /var/run/redis/redis-cache.pid로 수정했다.


 - port

 기본 port는 6379이다. 6380으로 수정한다.


 - logfile

 내 환경에서 /dev/null에 작성이 되어있는데, 특정 경로를 지정해도 된다. 귀찮아서 수정하지 않았다.


 - dbfilename *

 redis는 지정된 주기마다 데이터의 내용을 파일에 기록한다. 그 파일을 설정하는 것인데. 기본 이름은 redis.rdb인데, redis-cache.rdb로 수정한다.


 - dir *

 현재 /var/lib/redis 로 되어있는데, 영 찝찝해서 /var/lib/redis-cache로 설정했다.


3. 폴더 생성 및 권한 설정

 활동할 폴더를 설정해 주었으니 폴더를 생성해 주어야한다.

sudo mkdir /var/lib/redis-cache

sudo chown redis.redis /var/lib/redis-cache


4. init 스크립트 작성

새 redis 개체를 구동시키기 위한 스크립트를 작성한다. 여기에 붙여넣기엔 이쁘지 않아서 gist에 링크를 참고하도록 한다. 파일명은 redis-cache-server로 했다.

/etc/init.d/redis-cache-server

경로에 파일을 생성했다.


https://gist.github.com/anonymous/3759a0849276b8582000


본인이 수정을 해야 할 때 참고해야 할 부분은 아래와 같다

sudo vi /etc/init.d/redis-cache-server


 - DAEMON_ARGS

   service daemon에 들어갈 설정 파일의 경로이다. 상단에서 복사해서 수정한 파일의 경로를 적으면 된다.

 - NAME

   새로 올릴 redis instance의 이름을 기재하면 된다. 왠만하면 shell과 이름을 같게 하면 좋을 것 같다.

 - DESC

   새로 올릴 redis instance의 설명을 기재하면 된다. 귀찮아서 같게 적는다.

 - PIDFILE

   redis-cache.conf에 적은 pid 파일의 경로를 적어준다.


그 후에, 실행 권한을 부여하기 위해


sudo chmod +x /etc/init.d/redis-cache-server


를 실행한다.


5. 설정 파일 배포 및 실행 테스트

 update-rc.d 를 통하여 설정 파일을 배포한다.


sudo update-rc.d /etc/init.d/redis-cache-server defaults


를 입력한 후에


sudo /etc/init.d/redis-cache-server


를 실행해서 구동에 실패했다면 위의 내용을 다시 확인해 올려본다. 구동에 성공했다면(별다른 말이 없다면)


redis-cli -p 6380

을 통해서 cli 접근이 되는지 확인하고 사용해보자.





뭐 순조롭게 잘 돌아가고 있는 것 같다.



Posted by TY
,

sudo apt-get install php5-curl sudo /etc/init.d/apache2 restart


http://ubuntuforums.org/showthread.php?t=391313



Posted by TY
,

http://askubuntu.com/questions/65468/where-can-i-find-a-subversion-1-7-binary


As of Ubuntu 12.10, subversion 1.7 is available as part of the distribution. Subversion can be installed using apt-get.

sudo apt-get subversion

For earlier version of Ubuntu, there is a ppa available at subversion-1.7. The repository can be added as follows:

sudo apt-add-repository ppa:dominik-stadler/subversion-1.7

To get the latest version of subversion update and upgrade the repository.

sudo apt-get update
sudo apt-get upgrade

I needed to also do a dist-upgrade.

sudo apt-get dist-upgrade

I'm assuming that you already have subversion installed, if not:

sudo apt-get install subversion

Posted by TY
,

환경:

OS: Mac OSX 10.8.2 (Mountain lion)

WAS: Python Django 1.4.1

DBMS: MySQL 5.5 community edition

Browser: Chrome 버전 23.0.1271.64 (OSX용)


TinyEditor는 굉장히 가벼운 wisywig richtext editor이다.  이리저리 검색을 해보다가 사용하게 되었다.


홈페이지: http://www.scriptiny.com/2010/02/javascript-wysiwyg-editor/


사용법도 간단하고, 쉬운데 언제나 wisywig에디터의 문제인 'post'였다. 많은 wisywig에디터를 이용해보았고, 대부분 post, dosubmit 등의 함수가 있는데. TinyEditor는 그대로 쳤는데 안되는 것.


tinyeditor 홈페이지에는 다음과 같이 기재되어 있다.


삽입 예제: http://www.scriptiny.com/qa/2134/tinyeditor-php-integration-help


form에서 onsubmit에서 에디터의 instance.post() 함수를 호출하는 것.

<form id='editor' action=admin.php method=post onsubmit='editor.post();'>


와 같은 식으로 호출을 하게 했다. 여기서 editor라는 instance는, 아래에서 알 수 있다. tinyeditor를 생성하는 부분을 살펴보자.


new TINY.editor.edit('editor',{
 
                        id:'input',
 
                        width:584,
 
위에서 굵게 처리한 'editor'가 바로 인스턴스 이름인데, 저렇게 해서는 넘어오지 않는다. (크롬의 문제인가? 내 mac에는 webkit기반의 browser밖에 깔려있지 않고, 다른건 귀찮아서 테스트해보지 못하겠다. 이제 webkit의 세상이 온다구요. 하하.)

하지만 저렇게 해서는 TextArea는 value를 얻어오지 못한다. 네트워크 통신을 감시해도 넘어오는 값이 없다는 것을 쉽게 알 수 있다. 

그래서 자바스크립트콘솔을 이용해서 좀 지질하게 파싱해본 결과.

onsubmit에 함수를 하나 매핑해서 처리했다.

   <!-- form definition -->
<form id="sendForm" method="POST" action="/result/" enctype="multipart/form-data" onsubmit="dosubmit()">
   
   //Javascript function definition
function dosubmit(){
var fileName = document.getElementById("img").src;
                    fileName = fileName.substr(fileName.lastIndexOf('/')+1);
                    document.getElementById("filename").value = fileName;
                    tinyeditor_contents.post();
                    $("#desc").val(tinyeditor_contents.t.value);
}
           //TinyEditor create
var my_instance = new TINY.editor.edit('tinyeditor_contents', {
id: 'tinyeditor',
width: 584,



저런식으로 사전에 post()함수를 호출해준 후에 instance.t.value 로 호출을 하면 값을 얻을 수 있다.

관련된 정보를 명확히 얻을 수 없기에 기재한다. 



Posted by TY
,

'Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause'


나를 4시간동안 뻐큐먹인 에러문. sync db를 못해서, 테스트를 못함. ㅜㅜ


에러 난 이유:


timestamp 가 current_timestamp가 default인 칼럼을 두개 만들지 마라.... 말랜다... 그냥 정신 멍하고 귀찮아서 구글에서 검색만 하다가, 제정신을 차려보니 나를 공격함.


한 마디로..


class Foo(models.Model):

    bar   = UnixTimestampField(auto_created=True)

    bar2  = UnixTimestampField(auto_created=True)


이걸 하지 말란거임.. ㅜㅜ (파이썬)

Posted by TY
,

참다참다 못참아서 그냥 설정 뒤집어 깜.


환경: 

- mbp 13" early 2011 (2.7@Intel core i7, ddr3 4G, hd graphics 384mb)

- osx 10.8.2 (mountain lion)

- mysql 5.5.27



1. /etc/my.cnf 가 없어요!


Open Terminal (in Utilities folder under Applications folder) 

cd /usr/local/mysql/support-files/
sudo cp my-huge.cnf /etc/my.cnf

and enter your admin password when prompted. You could do this from a non-admin account by using the su command, but that's probably a bit scary for some people ;) 

You will now have a copy of my.cnf in /etc (just in case you don't know, that means the etc folder directly under the root folder, not under MySQL's install folder) 

You can edit it with a text-editor such as TextWrangler by using File->Open Hidden, or if you are happy to use the command line, use: 

cd /etc

출처: http://forums.mysql.com/read.php?11,366143,376017#msg-376017

2. 이제 설정을 덮어씌워요!

[mysqld]

character-set-server=utf8

collation-server=utf8_general_ci


init_connect=SET collation_connection=utf8_general_ci

init_connect=SET NAMES utf8

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8


를 각각에 추가


출처: http://mirwebma.tistory.com/5


3. 껐다 켜요!







4. 확인을 해봐요 !



와 된다 ..ㅋ.. 그 전에 만들어 놓은 테이블들은 어쩌죠...ㅋ...ㅋ.. 다 날려야징..ㅋ..ㅜㅜ

Posted by TY
,

 일요일 새벽에 갑자기 원격 포트가 접속이 안된다고 IDC에서 문자가 왔었습니다. 이게 무슨 일일까요...


그래서홈페이지를 들어가보니 뭐 접속이 되는데, DB데이터를 불러오는 곳에서 오류메세지가 나더라구요. 


뭐 내용은 아래와 같았습니다.


Error Code: 145. Table 'scheme.table_name' is marked as crashed and should be repaired



음.. 에러를 보아하니 꼭 테이블이 깨진 것 같단 생각이 들었습니다. 일단 테이블은 MyISAM이었습니다. 갑자기 3년 전에 InnoDB로 된 거대 테이블 하나가 깨졌을 때의 안 좋은 기억이 스믈스믈 떠오르면서 그 때에 MyISAM은 복구가 굉장히 간편하다라는 검색 내용이 생각나서 좀 검색을 해봤습니다.


http://dev.mysql.com/doc/refman/5.0/en/myisam-repair.html


다음과 같은 답변이 있더군요. 뭐 간략히 요약하자면..


콘솔창이나 workbench나 phpMyAdmin 등 SQL을 실행할 수 있는 무언가를 능력껏 구동하여,


repair table 'scheme.table_name' 을 실행하면 자동적으로 고쳐진다고 합니다. 만약 그게 안된다면 위의 링크를 참조하여 고치면 되는 것 같네요.


원격 접속 안되지, phpmyadmin 안되지, 결국은 IDC에 전화해서 원격 콘솔 열어달라고해서 했습니다 -_-


보통 이 문제는 서버가 강제적으로 종료되었을 때 나타나는데, 어제 저희 홈페이지 서버가 강제로 전원이 나갔었어서 그 문자메세지가 최초로 도착한 것 같습니다.


공격이라도 받았을까봐, 원격 콘솔 열어서 RDC 포트 바꾸고 이리저리 수선을 떨었었는데..


뭐 결론은 파워서플라이 불량이었습니다. 이것부터 어제밤에 문제 생기고 계속적으로 문제가 생겨서 문자오고 메일오고 핸드폰 그래서 하루종일 징징거리고, 어제밤부터오늘 아침부터 저녁까지 수선떤걸 생각하면, 아오... 


근데 뭐 기계가 망가진게 사람의 뜻이겠습니까. 


뭐 그렇습니다. :) 


Posted by TY
,

MySQL을 쓰다가 아무 생각없이 칼럼이름을 order로 지었다.

뭐 잘 되겠지 싶었느네

INSERT INTO table_name(order, ... ,) VALUES(0, ... , )
이렇게 넣으니 order행에서 에러가 나는 것이어다

그래서 나는 이 부분을

INSERT INTO 'shcema_name'.'table_name'('order', ... ) VALUES(0, ... ,)

같은 식을 처리했는데 같은 에러가 계속 나는 것이다

그래서 MySQL Workbench tool을 이용해서 같은 데이터를 Edit Tableㅇ르 이용해서 값을 삽입해봤다.

그랬더니 INSERT INTO `schema_name`.`table_name`(`order, ...)

이런식으로 작성되는 것이다.

위의 것은 홀따옴표(엔터 옆의 그것) 이고 아래 것은 1 옆에 있는 그것이다.

그런데 저렇게 수정하니 잘 되는 것이 아닌가 -_-...

결론은..

스키마 이름이나 칼럼 네임은 `으로 묶어야 하고 뒤의 데이터는 '으로 묶어야 한다는 이야기..

오늘의 삽질 하나 끝~
Posted by TY
,

아.. 속상하다 진짜.ㅠㅠ 게을러서 망함 ㅠㅠ

코드 테이블에 관련된 부분을 보고 있는데 자꾸 iBatis에서 본 적도 없는 에러가 나는 것이었다.

 에러 내용인즉슨..

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null]; error code [0];   

--- The error occurred in sqlmap/dummy.xml.  

--- The error occurred while applying a result map.  

--- Check the code.CodeResult.  

--- The error happened while setting a property on the result object.  

--- Cause: net.sf.cglib.beans.BulkBeanException; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:   

--- The error occurred in sqlmap/dummy.xml.  

--- The error occurred while applying a result map.  

--- Check the code.CodeResult.  

--- The error happened while setting a property on the result object.  

--- Cause: net.sf.cglib.beans.BulkBeanException



였다.

인터넷에는

1. 아마 ResultMap에 property랑 매치가 안될 것이다
2. 네가 ResultMap 지정해 준 클래스에 getter, setter가 제대로 지정이 안 되있을 것이다
3. ResultMap에 쓸 class랑 ResultMap의 property수가 맞지 않을 것이다

였는데 다 안되는거였다.

찾아오는 멘붕.. 

알고보니까 INT형 값에 기본값이 들어있지 않으면 에러가 나는거였다. 

다른걸 하고 있다가 번뜩이며 생각나서 그냥 막 값을 넣어보았더니 갑자기 하나는 받아오는데 성공하고 다음꺼부터 실패하더라 ㅠㅠ

이제 웹/웹서버 개발 나름 만 3년 정도 채운 것 같은데..

스프링은 배운지 아직도 채 1년이 되지 않았기 때문에 삽질이 너무 많아서 작업 속도가 영 안나오는 것 같다.

대형 프레임웍을 수용할 수 있으려면 게임 서버를 만들건 뭘 만들건 스프링같은 프레임웍을 쓰는게 좋을 것 같은데...

php처럼 막 짤 수가 없는 부분이 답답하다. 그렇다고 Servlet을 쓰자니 php하는 만 못하는 것 같고... 언제쯤 능숙해질까? 걱정이다. 

spring에러는 ASP보다 해석하기가 더 어려운 것 같다 -_- ASP구버전도 에러 해석할 때 정말 힘들었는데..

어쨌든 오늘은 글자 하나 써주긱 귀찮아서 삽질을 좀 오래 했다.

오늘의 교훈: column에 default value 설정을 꼼꼼히 해주자 

 

Posted by TY
,

열심히 코딩을 하다가 갑자기 거지같은 에러가 났다. 별로 수정하지도 않았는데 -_- 위와 같은 에러가 났다.

Files의 "<<<<<<< .mine" 값이 잘못되었습니다. 경로에 잘못된 문자가 있습니다.

라는 에러였는데 ...

프로젝트 정리(Project clean)을 해도 , 솔루션 정리를 해도 해결이 되지 않았다.

그래서 열심히 인터넷을 뒤졌는데 MSDN에도 안나오더라 -_-; 그래서 한글 검색을 끄고 영어 검색을 했더니 인터넷 많은 결과물이 있길래 ..

stackoverflow 에서 찾아봤더니, 클린을 하라는 것이다. 그래도 안되길래 계속 그 글을 보다가 아래 구석 댓글에

bin폴더를 지우라는 말이 있었다.

그래서 bin과 obj를 모두 지우고 했더니 다시 되더라.

아마 svn에 bin과 obj를 모두 포함시켜 업데이트 할 때 문제가 생기지 않았나 싶다.

거지같네..;;
Posted by TY
,