개발자 생활에 해당되는 글 11건
2009/03/06 :: [CakePHP] Auth Component를 사용하는데 난데없이 Logout 될때..
2009/02/26 :: 윈도우 xp 자동 로그인 설정하기
2008/12/26 :: form helper에 select 태그에 한글 데이터가 안나온다?? (ver 1.2)
2008/11/01 :: cakePHP - 당황 스러운 삽질
2008/04/18 :: emacs가 CPU 100%를 !!!
2008/04/18 :: 다른 디렉토리에서 compile 하기
2007/07/14 :: cakePHP - 특정 action에서 layout없이 사용하기
2007/06/08 :: CSS - internet explorer 6의 margin 버그
2007/05/22 :: cakePHP - logging 하기
2009/04/24 16:24 :: 개발자 생활
apchectl로 start를 하려는 중
File exists: unable to create scoreboard ... apache_runtime_status
과 같은 메시지가 error.log에 남으면서 start가 되지 않는 경우가 있었다.
logs 디렉토리안에 apache_runtime_status 파일이 있어서 안되는구나! 라고 생각하고
logs 파일에 apache_runtime_status 파일을 삭제한후 다시 start!
하지만 또 같은 메시지로 startup이 되지 않는다. 이건 먼가 -_-;
먼가 비정상적인 이유로 apache가 죽은 경우에 apche에서 사용하던 shared memory 관련되서 문제가 있는것이다.
shared memory를 만드려고 하는데 이미 존재하여 오류가 발생한것인데 아래와 같이 확인 후 없앨수 있다.
icps -p 라는 명령어를 쳐보자
젤 위에 Shared Memory Creator ... 라는 부분에
shmid owner cpid lpid
0
1231232 root 3333 3333
2312322 root 4444 4444
:
:
머 이런식으로 나올거다.
위에서 두번째 3333이라는 프로세스가 1231232라는 id의 shared memory를 만들어 쓰고 있다는건데
File exists: unable to create scoreboard ... apache_runtime_status
과 같은 메시지가 error.log에 남으면서 start가 되지 않는 경우가 있었다.
logs 디렉토리안에 apache_runtime_status 파일이 있어서 안되는구나! 라고 생각하고
logs 파일에 apache_runtime_status 파일을 삭제한후 다시 start!
하지만 또 같은 메시지로 startup이 되지 않는다. 이건 먼가 -_-;
먼가 비정상적인 이유로 apache가 죽은 경우에 apche에서 사용하던 shared memory 관련되서 문제가 있는것이다.
shared memory를 만드려고 하는데 이미 존재하여 오류가 발생한것인데 아래와 같이 확인 후 없앨수 있다.
icps -p 라는 명령어를 쳐보자
젤 위에 Shared Memory Creator ... 라는 부분에
shmid owner cpid lpid
0
1231232 root 3333 3333
2312322 root 4444 4444
:
:
머 이런식으로 나올거다.
위에서 두번째 3333이라는 프로세스가 1231232라는 id의 shared memory를 만들어 쓰고 있다는건데
일단 위에 나온 pid가 현재 다 돌고 있는지 봐서 없는 프로세스가 apache가 사용했던 pid일수 있다.
ps -aef |grep pid
로 다 뒤져본다. (또는 apache error 로그등에서 pid의 흔적이 남아 있다면 해당 것으로 찾아볼 수도 있다.)
없는 놈을 발견하면 그놈의 shared memory id (shmid)를 가지고 해당 share memory를 삭제 할 수 있다.
icprm -m shmid
를 하면 해당 shared memory 가 삭제된다.
이제 다시 apachectl로 start 해보면 잘될것이다~ ^0^
ps -aef |grep pid
로 다 뒤져본다. (또는 apache error 로그등에서 pid의 흔적이 남아 있다면 해당 것으로 찾아볼 수도 있다.)
없는 놈을 발견하면 그놈의 shared memory id (shmid)를 가지고 해당 share memory를 삭제 할 수 있다.
icprm -m shmid
를 하면 해당 shared memory 가 삭제된다.
이제 다시 apachectl로 start 해보면 잘될것이다~ ^0^
| 태그 : | apache, apache_runtime_status, icps, scoreboard |
2009/03/06 16:09 :: 개발자 생활
오랜만에 CakePHP 관련된 글을 올리네요. 오늘은 사용자 인증 관련된 Component인 Auth Component에 대해서 적어봅니다.
Auth 컴포넌트를 쓰면 쉽게 로긴 회원 관리등을 구현할 수 있습니다.
관련글은
http://book.cakephp.org/view/172/Authentication
여기를 참조하시면 되구요.
그런데 쓰다보면 몰르고 request를 두번 날린다던가 (클릭을 두번해버려서) 그런경우에 저절로 logout 되는 현상이 있습니다.
이게 무슨 문제인가 Auth에서는 Session Component를 사용하고 있고 timeout도 기본 120초 x 10초 로 되어있는데 ...
timeout 설정은 config/core.php에 Session.timeout 란에 120이 기본으로 되있고 Security.level에 따라서 timeout 값이 늘어납니다. Security.level에는 low, midium, high 가 있는데 각각 Session.timeout 값에 300초, 100초, 10초를 곱해준 값이 실제 timeout 값이 됩니다. 그런데 level 중에 high에는 그외에 다른 게 있는데요.
주석에는
라고 되어 있습니다. 이 말인 즉 request 마다 세션 id가 생성된다는건데요. 내부적으로 세션 id가 어떻게 관리되는지 는 모르겠지만 기본적으로 request마다 다른 세션이라는 얘기가 됩니다.
그래서 위의 문제를 해결하기 위해서는 Security.level 를 midium 이하로 설정해야 저런 문제가 없네요 ^^
자세한거는 소스를 좀더 봐야겠네요
Auth 컴포넌트를 쓰면 쉽게 로긴 회원 관리등을 구현할 수 있습니다.
관련글은
http://book.cakephp.org/view/172/Authentication
여기를 참조하시면 되구요.
그런데 쓰다보면 몰르고 request를 두번 날린다던가 (클릭을 두번해버려서) 그런경우에 저절로 logout 되는 현상이 있습니다.
이게 무슨 문제인가 Auth에서는 Session Component를 사용하고 있고 timeout도 기본 120초 x 10초 로 되어있는데 ...
timeout 설정은 config/core.php에 Session.timeout 란에 120이 기본으로 되있고 Security.level에 따라서 timeout 값이 늘어납니다. Security.level에는 low, midium, high 가 있는데 각각 Session.timeout 값에 300초, 100초, 10초를 곱해준 값이 실제 timeout 값이 됩니다. 그런데 level 중에 high에는 그외에 다른 게 있는데요.
주석에는
CakePHP session IDs are also regenerated between requests if 'Security.level' is set to 'high'.
라고 되어 있습니다. 이 말인 즉 request 마다 세션 id가 생성된다는건데요. 내부적으로 세션 id가 어떻게 관리되는지 는 모르겠지만 기본적으로 request마다 다른 세션이라는 얘기가 됩니다.
그래서 위의 문제를 해결하기 위해서는 Security.level 를 midium 이하로 설정해야 저런 문제가 없네요 ^^
자세한거는 소스를 좀더 봐야겠네요
2009/02/26 10:50 :: 개발자 생활
mac osx(server), xp(client)로 synergy를 사용하고 있습니다. 편하게 사용하기 위해서 둘다 자동 시작을 해놓았는데요 osx 쪽은 이전글에서 자동시작하도록 Login hook을 이용해서 설정하는 법을 포스팅했었습니다. 요번에는 xp 쪽에 자동 시작 설정시 문자가되는 로그인창을 없애고 자동 로그인 되도록 설정하는 법을 정리해봅니다. 사실 이건 "xp 자동 로그인"이라고 검색하면 많이 나오는데요. 그래도 이전 글과 짝을 맞추기 위해서 정리해 봅니다.
1. synergy에서는 Advanced 옆에 AutoStart를 클릭합니다.
2. AutoStart에는 두가지 모드가 있는데요 When Computer Starts로 설치를 합니다. Install을 누르면됩니다.
3. 이제 자동로그인 설정을 하는데요. 실행 -> regedit를 입력하여 레지스트리 편집기를 실행합니다.
4. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon 항목을 찾아 클릭합니다.
5. 수정해야할 키가 3개가 있는데요. 기존에 없으면 새로 추가 하면됩니다. 모두 문자열 값 타입으로 추가하면 됩니다.
6. DefaultUserName 키에 로그인 할 유저 아이디를 입력합니다.
7. DefaultPassword 키에 위에 유저의 비번을 입력합니다.
8. AutoAdminLogon 키에 1 값을 입력합니다.
9. 재시작 합니다 ^^
1. synergy에서는 Advanced 옆에 AutoStart를 클릭합니다.
2. AutoStart에는 두가지 모드가 있는데요 When Computer Starts로 설치를 합니다. Install을 누르면됩니다.
3. 이제 자동로그인 설정을 하는데요. 실행 -> regedit를 입력하여 레지스트리 편집기를 실행합니다.
4. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon 항목을 찾아 클릭합니다.
5. 수정해야할 키가 3개가 있는데요. 기존에 없으면 새로 추가 하면됩니다. 모두 문자열 값 타입으로 추가하면 됩니다.
6. DefaultUserName 키에 로그인 할 유저 아이디를 입력합니다.
7. DefaultPassword 키에 위에 유저의 비번을 입력합니다.
8. AutoAdminLogon 키에 1 값을 입력합니다.
9. 재시작 합니다 ^^
2008/12/26 17:26 :: 개발자 생활
form helper에서 options 기능을 아래 처럼 사용 하면 자동으로 생성해줍니다.
$form->input('mytest', array('options' => $tests);
이런식으로 하고 test에 array( [value에 들어갈것] => [화면에 표시될것], ...) 형태로 데이터를 넣어 줍니다.
그러면 select 테그가 자동으로 생성 되는데요.
그런데 "화면에 표시될것"에 한글이 들어가게 되면 이상하게 나오지를 않습니다.
그건 화면에 표시될것 데이터를 default로 escape을 하기 때문인데요.
escape을 하지 않게 하기 위해서는 ecape라는 attribute에 false 값을 주면 됩니다.
$form->input('mytest', array('options' => $tests, 'escape' => false);
이런식으로 하면 됩니다 ^^
$form->input('mytest', array('options' => $tests);
이런식으로 하고 test에 array( [value에 들어갈것] => [화면에 표시될것], ...) 형태로 데이터를 넣어 줍니다.
그러면 select 테그가 자동으로 생성 되는데요.
그런데 "화면에 표시될것"에 한글이 들어가게 되면 이상하게 나오지를 않습니다.
그건 화면에 표시될것 데이터를 default로 escape을 하기 때문인데요.
escape을 하지 않게 하기 위해서는 ecape라는 attribute에 false 값을 주면 됩니다.
$form->input('mytest', array('options' => $tests, 'escape' => false);
이런식으로 하면 됩니다 ^^
2008/11/01 00:22 :: 개발자 생활
최근에 모델에 belongsTo 관계가 적용 되지 않은 일이 있어 고생을 한적이 있다.
비단 belongsTo 뿐만아니라 member function을 정의해도 인식이 안되는 것이 였다.
모델 파일을 지워도 cakePHP에서는 동적으로 기본 model class를 생성해주기 때문에 확인할 길이 없었다.
그런데 문제는 클래스명이 였다.
특정 브랜드의 제품(모델)을 클래스로 만들었는데 의미상 모델이여서 클래스명을
<model.php>
class Model extends AppModel {
var $name = 'Model';
}
과 같이 했는데 이렇게 하니 모델로 인식이 안되는 것이였다 -_- cakePHP 에서 내부적으로 AppModel은 Model이라는 클래스를 상속 받는다 (http://api.cakephp.org/class_model.html)
클래스 이름을 줄때는 이미 있는게 아닌지 확인을 해보자 ^^
| 태그 : | cakePHP |
2008/04/18 21:29 :: 개발자 생활
ecb와 emacs를 사용할때 아무작업도 하지 않는데 CPU가 100%되는 경우가 있습니다.
자료를 찾아보니 이건 ecb를 사용하기 위해 필요한 cedet 라는 것의 버그로 인해서 그런것 같다고 하네요.
cedet는 현재 1.0pre4가 최신인데 1.0pre3을 쓸때 문제가 되어 1.0pre4로 다시 설치하고 사용하니
문제가 해결되었네요. 여러분들도 비슷한 문제가 있다면 1.0pre4로 다시 설치해 보세요
http://cedet.sourceforge.net/
2008/04/18 11:37 :: 개발자 생활
emacs에서 M-x complie로 make를 실행 할 수 있어요.
기본적으로 make는 소스파일과 같은 위치(default-directory)에 Makefile을 찾아서 make를 실행하는데
소스 파일과 다른 위치에 Makefile이 있다면 default-directory를 변경해 줘야합니다.
default-directory를 변경하기 위해서는 아래와 같이 합니다.
M-x cd <엔터> 디렉토리경로 <엔터>
기본적으로 make는 소스파일과 같은 위치(default-directory)에 Makefile을 찾아서 make를 실행하는데
소스 파일과 다른 위치에 Makefile이 있다면 default-directory를 변경해 줘야합니다.
default-directory를 변경하기 위해서는 아래와 같이 합니다.
M-x cd <엔터> 디렉토리경로 <엔터>
2007/07/14 12:08 :: 개발자 생활
action에서 controller에 지정된 layout을 사용하고 싶지 않은 경우 action안에서
fuction myaction() {
$this->layout = "";
}
이렇게 layout을 지정해 줄 수있다.
fuction myaction() {
$this->layout = "";
}
이렇게 layout을 지정해 줄 수있다.
2007/06/08 01:01 :: 개발자 생활
internet explorer 6에서는 div에 float와 margin을 같이 사용하는 경우에 margin의 left 또는 right 값이 지정해 준 값의 두배가 되는 버그가 있습니다. 아래 예제를 봅시다.
<html>
<head>
<style type="text/css">
<!--
#test {
margin: 0 0 0 50px;
border: 1px solid #000;
width: 100px;
height: 100px;
float: left;
}
-->
</style>
</head>
<body>
<table width="100" bgcolor="#000000">
<tr><td>100px</td></tr>
</table>
<div id="test">
</div>
</body>
</html>
<head>
<style type="text/css">
<!--
#test {
margin: 0 0 0 50px;
border: 1px solid #000;
width: 100px;
height: 100px;
float: left;
}
-->
</style>
</head>
<body>
<table width="100" bgcolor="#000000">
<tr><td>100px</td></tr>
</table>
<div id="test">
</div>
</body>
</html>
위의 예제는 100픽셀의 크기를 가늠하기위해서 100픽셀 짜리 table과 그아래에 넓이가 100픽셀 높이가 100픽셀인 div를 표시했습니다.
DIV는 눈에 잘 뛰게 하기 위해서 border를 1픽셀 두깨로 주었구요. left margin을 50픽셀 만큼 주었습니다.
그리고 왼쪽으로 붙이기 위해서 float: left;를 주었습니다.
위의 예제를 IE7과 IE6에서 각각 실행해보면 다른 모양으로 표시되는것을 볼 수 있습니다. 다시 말하면 IE6에서는 잘못 표시되고 있다고 봐야지요. margin을 50px을 주었는데도 100픽셀이 margin된것을 볼수 있습니다.
이런 오류를 해결하기 위해서 기본적으로 block 형태를 가지는 div 태그를 inline 형태로 표시해 주도록 설정해 주면 해결이 됩니다. 아래는 수정한 소스 입니다.
<html>
<head>
<style type="text/css">
<!--
#test {
margin: 0 0 0 50px;
border: 1px solid #000;
width: 100px;
height: 100px;
float: left;
display: inline;
}
-->
</style>
</head>
<body>
<table width="100" bgcolor="#000000">
<tr><td>100px</td></tr>
</table>
<div id="test">
</div>
</body>
</html>
<head>
<style type="text/css">
<!--
#test {
margin: 0 0 0 50px;
border: 1px solid #000;
width: 100px;
height: 100px;
float: left;
display: inline;
}
-->
</style>
</head>
<body>
<table width="100" bgcolor="#000000">
<tr><td>100px</td></tr>
</table>
<div id="test">
</div>
</body>
</html>
2007/05/22 01:38 :: 개발자 생활
cakePHP에서는 log를 쓰기 위해서 Object class의 맴버 함수로 log 함수를 지원한다. cakePHP에서 대부분의 클래스들은 Object 클래스를 상속 받기 때문에 log 함수는 대부분의 클래스에서 사용할 수 있다. 형태는 다음과 같다.
$msg는 로그에 기록할 메시지이고 $type은 로그 type이 된다. 기본 값은 LOG_ERROR이다 type에 대한 설명은 추후 더 작성하기로 하고 사용예는 다음과 같다.
이렇게 사용하며 파일은 기본적으로 /app/tmp/logs/error.log 에 생기게 된다. 만약 tmp/logs 폴더가 없다면 생성해 줘야 한다.
이 log 함수는 소스를 따라가보면 core/CakeLog.php에 write 맴버함수를 call하게 되는데 이곳을 수정해주면 Log 포멧도 수정 할 수 있다.
Object:log ($msg, $type=LOG_ERROR)
$msg는 로그에 기록할 메시지이고 $type은 로그 type이 된다. 기본 값은 LOG_ERROR이다 type에 대한 설명은 추후 더 작성하기로 하고 사용예는 다음과 같다.
$this->log("로그 입니다.");
이렇게 사용하며 파일은 기본적으로 /app/tmp/logs/error.log 에 생기게 된다. 만약 tmp/logs 폴더가 없다면 생성해 줘야 한다.
이 log 함수는 소스를 따라가보면 core/CakeLog.php에 write 맴버함수를 call하게 되는데 이곳을 수정해주면 Log 포멧도 수정 할 수 있다.
이올린에 북마크하기

