Missing Database Connection
Error: Mysql requires a database connection

Error: Confirm you have created the file : app/Config/database.php.

Notice: If you want to customize this error message, create app/View/Errors/missing_connection.ctp.

Stack Trace

#0 /home/widyou/www/blog/lib/Cake/Model/ConnectionManager.php(101): DboSource->__construct(Array)
#1 /home/widyou/www/blog/lib/Cake/Model/Model.php(3241): ConnectionManager::getDataSource('default')
#2 /home/widyou/www/blog/lib/Cake/Model/Model.php(1030): Model->setDataSource('default')
#3 /home/widyou/www/blog/lib/Cake/Model/Model.php(3265): Model->setSource('posts')
#4 /home/widyou/www/blog/lib/Cake/Model/Model.php(2483): Model->getDataSource()
#5 /home/widyou/www/blog/app/Controller/PostsController.php(7): Model->find('all')
#6 [internal function]: PostsController->index()
#7 /home/widyou/www/blog/lib/Cake/Controller/Controller.php(473): ReflectionMethod->invokeArgs(Object(PostsController), Array)
#8 /home/widyou/www/blog/lib/Cake/Routing/Dispatcher.php(104): Controller->invokeAction(Object(CakeRequest))
#9 /home/widyou/www/blog/lib/Cake/Routing/Dispatcher.php(86): Dispatcher->_invoke(Object(PostsController), Object(CakeRequest), Object(CakeResponse))
#10 /home/widyou/www/blog/app/webroot/index.php(96): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
#11 {main}



 
php를 세팅한 후 Cakephp 예제를 따라하는데 위와같이 아주 이쁘고 사람 미치게하는 에러가 계속해서 발생했다.
아무리 포럼을 뒤져보고 해도 해결되지 않는 문제. 저 문제가 나는 경우가 매우 극소수인듯 한데다가 가끔 달린 답변글은 암호가 다르거나 어쩌구저쩌구..
이것떄문에 하루를 버리다가 끄트머리에서 cakephp도 로그를 남기겠지 하고 로그를 뒤져보았다.
로그는 app/tmp/logs/error.log 에 위치해있었다.
아래로 쭉 내려보니 원인을 추정할 수있는 단서를 찾을 수 있었다.

2012-03-01 23:09:05 Error: [MissingConnectionException] Database connection     "Mysql" is missing, or could not be created.



아니 이게 무슨소리야! mysql연결에 쓰는 객체 자체가 없다니!
cakephp가 곶아라니!
저 에러로 검색을 해보니 cakephp는 pdo라는걸 이용해 db에 연결한다는 걸 알아냈다.
내 php에는 모듈이 하나도 없었으니 혹시나 하는 마음에 php 소스디렉토리에 가서 ext에 pdo로 시작하는 디렉토리를 찾아보니 떡하니 나오는 pdo_mysql...

속으로 온갖 욕을 하며 이전글처럼 모듈을 따로 빌드해다가 php에 넣었더니 무슨일 있었냐는 듯이 잘 연결된다.
으으 그래도 로그에서 저 한줄 찾은게 실마리가 되어서 다행이다.
오늘안에 못돌리면 포기하려고 했는데. 휴~

내일은 튜토리얼대로 간단한거 하나 만들어보고 내가만든 네모로직게임 자바스크립트 라이브러리로 사이드 하나 만들어본 후 잘 돌아가면 가상서버호스팅까지 해봐야겠다.

가상서버호스팅 대비해서 서버도 vmware는 최소화해놓고 후 모든 작업은 putty로 ssh콘솔 열어서 작업하고 있다.
영어채팅이 점점 빨라지는 기분이야!

아무튼 이런 삽질은 나만 하자는 마음으로 기록을 공유해본다.

계속 삽질하니 점점 apache와 php에 대해 알아가고 있는 느낌이 들어 좋다. 

License
달리 정하지 않는 한, 이 저작물 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Except where otherwise noted, this content is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea License
저번 글처럼 apache와 php를 설치한 후 phpMyAdmin을 설치했는데 아래쪽에 mysqli와 mcrypt를 찾을 수 없다는 경고가 떠서 내 신경을 긁었다. 알아보니 빌드할때 configure 에 --with-mysqli --with-mcrypt 이런 옵션을 붙인 후 빌드를 해야 하는 것이었다. 근데 이제와서 php를 다시 빌드할 수는 없잖아? 그래서 구글링을 열심해 해봤다.

우선 php소스파일이 있던 곳으로 이동해 ext/(모듈명) 디렉토리로 이동한다.
mysqli를 예로 들면
$ cd ext/mysqli

php관련 실행파일이 있는곳의 phpize라는 실행파일을 찾아 실행한다.
php빌드할때 prefix를 줬다면 그 경로의 bin에 있을 가능성이 높다. 나갔은 경우는 기본값으로 빌드했는데 /usr/local/bin에 있었다.

$ /usr/local/bin/phpize

그러면 라이브러리가 부족할경우 에러가 뜨는데 apt-get을 이용해서 가뿐히 설치해주고 해결한다. 난 autoconf가 없다고떠서 설치하니 해결되었다.

phpize가 완료돠면 이제 configure 파일이 생성되게 되는데 mysqli는 아래와 같이 옵션을 주자
$ ./configure --with-php-config=/usr/local/bin/php-config --with-mysqli=/usr/bin/mysql_config
사실 위 옵션을 몰라도 그냥 configure를 해본 후 에러메세지를 본 후 부족한 옵션을 추가하면 된다.

이제 make 까지만 실행 한다(install은 하지 않는다)
$ sudo make

이후 modules 디렉토리를 보면 mysqli.so 파일이 생성되어있을 것이다.
이것을 적당한 공간에 복사한다.
$ sudo mkdir /usr/local/lib/php/modules
$ sudo cp modules/mysqli.so /usr/local/lib/php/modules

이제 php.ini파일을 열어 수정해야한다.
$ sudo vim /usr/local/lib/php.ini

파일을 살펴보면 아래와 같이 모듈 경로 지정하는 부분이 주석처리되어있을 건데 이를 수정한다.
; extension_dir = "./"
->
extension_dir = "/usr/local/lib/php/modules "

그리고 더 내려가면 extension=모듈명 이런 구분들이 쭉 주석처리된 곳이 있는데 아래와 같이 모듈명을 추가해준다
extension=mysqli.so

이제 저장하고 apache를 재시작하면 적용이 된다!
mcrypt모듈도 같은 방법으로 하면 된다. mcryipt는 libmcryipt 를 요구하는데 sudo apt-get install libmcrypt-dev 명령으로 설치 후 그냥 configure & make 하면 된다.
 

License
달리 정하지 않는 한, 이 저작물 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Except where otherwise noted, this content is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea License
mysql은 apt-get으로 설치하고 이전 글대로 apache2는 최신버전을 직접 빌드했을 때 php 빌드하기

최신버전 다운로드
http://www.php.net/downloads.php 
 
php 사이트에서 제시한 configure는 아래와 같이 하면 된다고 하는데
$ ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql
해보면 mysql을 apt-get으로 설치해서인지 헤더 파일을 찾을 수 없다고 나온다

우선 헤더파일 설치
$ sudo apt-get install libmysql++-dev

이후 configure를 아래와 같이하고 make
$ ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/include/mysql
$ sudo make
$ sudo make install

설정파일 넣기
$ sudo cp php.ini-development /usr/local/lib/php.ini

아파치 설정 수정
$ sudo vi /usr/local/apache2/conf/httpd.conf
파일 하단에 아래 3줄 추가
<IfModule php5_module>
AddType application/x-httpd-php .php .phtml .php3 .php5
</IfModule>

아파치 재시작
$ sudo /usr.local/apache2/bin/apachectl restart
또는 이전글처럼 서비스 등록을 해뒀으면
$ sudo /etc/init.d/apache restart

 

License
달리 정하지 않는 한, 이 저작물 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Except where otherwise noted, this content is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea License

+ Recent posts