CMS/프레임워크 | XE 1.x |
---|---|
개발 언어 | PHP 7.0 |
라이믹스 설치가 끝나고 나면 뿜는 에러입니다.
기존 XE 자료가 들어있는 DB를 선택하고 테이블 접두사를 xe로 하면 설치 진행이 되지 않고 제자리로 돌아옵니다.
접두사를 rx 등으로 바꾸거나 새로운 DB를 생성해서 설치하면 위의 화면같은 에러를 뿜어냅니다.
저게 무슨 코드지요??

카르마
Lv. 4
imageprocess, 통합검색확장모듈
아빠팬더곰은 영원한 초보
아빠팬더곰은 영원한 초보
댓글 17
php.ini에서 display_errors = On으로 변경하여 에러 메시지를 표시하도록 하거나, 에러 로그를 보시면 답이 나올 것 같습니다. 라이믹스 설치에 필요한 PHP 확장모듈이 설치되어 있지 않거나 뭐 그런 거겠지요.
이미 XE가 설치되어 있는 DB에 동일한 접두사로 설치하려고 하면 안 되는 것이 당연합니다. 이미 XE가 설치되어 있다면 마치 새 버전 업데이트하듯 라이믹스를 덮어씌우는 것이 곧 설치입니다.
{"error":-1,"message":"Error #0 "Call to undefined method BaseObject::isConnected()" in modules\/install\/install.controller.php on line 207"}
해당 코드는
// Check DB.
$oDB = DB::getInstance();
if (!$oDB->isConnected())
{
return $oDB->getError();
}
입니다.
DB 연결이 안되다는
확인해보니까
./files/config 폴더는 생기는데
db.config.php 화일 생성이 안되네요.
퍼미션 문제는 아닌데... 뭐지???
DB 접속 정보가 틀리거나, 지원하지 않는 DB type을 선택하면 일어나는 현상입니다.
라이믹스는 db.config.php 파일을 사용하지 않습니다. 설치가 완료되면 자동으로 생성되기는 합니다만, 그 파일을 직접 인클루드하는 일부 서드파티 자료를 배려하는 것 뿐이므로 해당 파일을 수정해도 효과는 없습니다.
설정시 mysql 한가지 DB 밖에 나타나지 않으니 선택이 잘못될 리는 없고
DB 접속정보도 틀릴리는 없고
XE에서 mysqli_innodb 로 잘 이용하고 있습니다.
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 95552
Server version: 10.1.37-MariaDB MariaDB Server
마찬가지입니다.
DB도 drop하고 새로 만들었습니다.
[soonj@localhost rhymix]$ ls -l
합계 148
-rw-r--r-- 1 soonj users 11577 12월 20 08:53 CONTRIBUTING.md
-rw-r--r-- 1 soonj users 116 12월 20 08:53 COPYRIGHT
-rw-r--r-- 1 soonj users 1858 12월 20 08:53 Gruntfile.js
-rw-r--r-- 1 soonj users 18092 12월 20 08:53 LICENSE
-rw-r--r-- 1 soonj users 9193 12월 20 08:53 README.md
drwxr-xr-x 10 soonj users 4096 12월 20 08:53 addons
drwxr-xr-x 22 soonj users 4096 12월 20 08:53 classes
-rw-r--r-- 1 soonj users 404 12월 20 08:53 codeception.dist.yml
drwxr-xr-x 12 soonj users 4096 12월 20 12:16 common
-rw-r--r-- 1 soonj users 1277 12월 20 08:53 composer.json
-rw-r--r-- 1 soonj users 36202 12월 20 08:53 composer.lock
drwxr-xr-x 2 soonj users 4096 12월 20 12:15 config
-rw-r--r-- 1 soonj users 2048 12월 20 08:53 index.php
drwxr-xr-x 8 soonj users 4096 12월 20 09:45 layouts
drwxr-xr-x 5 soonj users 4096 12월 20 08:53 m.layouts
drwxr-xr-x 33 soonj users 4096 12월 20 08:53 modules
drwxr-xr-x 6 soonj users 4096 12월 20 08:53 tests
drwxr-xr-x 5 soonj users 4096 12월 20 08:53 tools
drwxr-xr-x 21 soonj users 4096 12월 20 08:53 vendor
drwxr-xr-x 8 soonj users 4096 12월 20 08:53 widgets
drwxr-xr-x 3 soonj users 4096 12월 20 08:53 widgetstyles
[soonj@localhost rhymix]$ mkdir files
[soonj@localhost rhymix]$ chmod 707 files/
[soonj@localhost rhymix]$ ls files/ -l
합계 0
[soonj@localhost rhymix]$
라이믹스와의 첫만남이 좀 거시기하네요.
설치도 안되었는데 디버그부터 하고 있으니...ㅎㅎ
./config/config.user.inc.php는 분명 만들었는데 ./files/_debug_message.php가 아예 생기지도 않습니다. 내가 뭘 잘못했나 여러번 체크하다고 콘솔을 열어보니 500에러가 찍히네요.
설치가 완료되기 전에는 디버그 파일이 생성되지 않습니다. 일단 설치가 되면 훨씬 다양한 디버그 기능을 선택하여 사용하실 수 있는데, 설치가 안 되고 있으니.. ㅜㅜ 소스에서 직접 error_log()나 var_dump() 등을 사용하여 변수를 찍어봐야겠네요.
500 에러가 뜨는 원인은 위의 문제와 같을 겁니다. 어떤 이유에서인지 DB 접속에 실패하여 정상적인 $oDB가 생성되지 않고 있습니다.
XE와 라이믹스 모두 Travis CI와 연동하여, git 커밋이 발생할 때마다 자동으로 설치 테스트가 이루어지고 있습니다. 최근에 이 테스트가 실패한 기록은 없으니, 뭔가 서버 환경이 맞지 않는 게 있는 모양입니다. 만약 여기에 나와 있는 설치 조건을 모두 충족하는데도 설치가 되지 않는다면 저희가 파악하지 못한 의존성이 또 있는지도 모르겠네요.
오늘은 시간이 좀 나서 중간중간 디버그를 몇개 찍어봤습니다.
먼저 에러가 생기는 modules/install/install.controller.php on line 207 직전의 $oDB
O:10:"BaseObject":4:{s:5:"error";i:-1;s:7:"message";s:40:"DB 설정이 되어 있지 않습니다.";s:9:"variables";a:0:{}s:14:"httpStatusCode";i:200;}
classes/db/DB.class.php에서 function getInstance()에 전달이 안됩니다.
O:2:"DB":16:{s:12:"*master_db";N;s:11:"*slave_db";N;s:9:"*result";N;s:8:"*errno";i:0;s:9:"*errstr";s:0:"";s:8:"*query";s:0:"";s:13:"*connection";s:0:"";s:15:"*elapsed_time";i:0;s:23:"*elapsed_dbclass_time";i:0;s:22:"*transaction_started";b:0;s:15:"*is_connected";b:0;s:13:"*cache_file";s:55:"/home/http/htdocs/soonj.net/rhymix/files/cache/queries/";s:7:"db_type";N;s:10:"db_version";s:0:"";s:23:"use_prepared_statements";N;s:25:"*transactionNestedLevel";i:0;}
다시 modules/install/install.controller.php
107번 라인의 $config
a:22:{s:14:"config_version";s:3:"2.0";s:2:"db";a:1:{s:6:"master";a:9:{s:4:"type";s:5:"mysql";s:4:"host";s:9:"localhost";s:4:"port";i:3306;s:4:"user";N;s:4:"pass";N;s:8:"database";N;s:6:"prefix";N;s:7:"charset";N;s:6:"engine";N;}}s:5:"cache";a:1:{s:15:"truncate_method";s:6:"delete";}s:3:"ftp";a:7:{s:4:"host";s:9:"localhost";s:4:"port";i:21;s:4:"path";N;s:4:"user";N;s:4:"pass";N;s:4:"pasv";b:1;s:4:"sftp";b:0;}s:6:"crypto";a:3:{s:14:"encryption_key";N;s:18:"authentication_key";N;s:11:"session_key";N;}s:6:"locale";a:5:{s:12:"default_lang";s:2:"ko";s:12:"enabled_lang";a:1:{i:0;s:2:"ko";}s:16:"auto_select_lang";b:0;s:16:"default_timezone";s:10:"Asia/Seoul";s:17:"internal_timezone";i:32400;}s:3:"url";a:5:{s:7:"default";N;s:26:"unregistered_domain_action";s:12:"redirect_301";s:9:"http_port";N;s:10:"https_port";N;s:3:"ssl";s:4:"none";}s:7:"session";a:9:{s:5:"delay";b:0;s:6:"use_db";b:0;s:8:"use_keys";b:0;s:7:"use_ssl";b:0;s:15:"use_ssl_cookies";b:0;s:6:"domain";N;s:4:"path";N;s:8:"lifetime";i:0;s:7:"refresh";i:300;}s:4:"file";a:2:{s:16:"folder_structure";i:2;s:5:"umask";s:4:"0022";}s:4:"mail";a:1:{s:4:"type";s:12:"mailfunction";}s:4:"view";a:5:{s:14:"manager_layout";s:6:"module";s:14:"minify_scripts";s:6:"common";s:14:"concat_scripts";s:4:"none";s:11:"server_push";b:0;s:8:"use_gzip";b:0;}s:5:"admin";a:2:{s:5:"allow";a:0:{}s:4:"deny";a:0:{}}s:4:"lock";a:4:{s:6:"locked";b:0;s:5:"title";s:11:"Maintenance";s:7:"message";s:0:"";s:5:"allow";a:0:{}}s:5:"debug";a:11:{s:7:"enabled";b:1;s:16:"log_slow_queries";i:0;s:17:"log_slow_triggers";i:0;s:16:"log_slow_widgets";i:0;s:24:"log_slow_remote_requests";i:0;s:12:"log_filename";N;s:12:"display_type";a:1:{i:0;s:7:"comment";}s:15:"display_content";a:0:{}s:10:"display_to";s:5:"admin";s:15:"write_error_log";s:5:"fatal";s:5:"allow";a:0:{}}s:3:"seo";a:8:{s:10:"main_title";s:0:"";s:13:"subpage_title";s:0:"";s:14:"document_title";s:0:"";s:10:"og_enabled";b:0;s:22:"og_extract_description";b:0;s:17:"og_extract_images";b:0;s:19:"og_extract_hashtags";b:0;s:17:"og_use_timestamps";b:0;}s:11:"mediafilter";a:3:{s:6:"iframe";a:0:{}s:6:"object";a:0:{}s:7:"classes";a:0:{}}s:8:"security";a:2:{s:16:"check_csrf_token";b:0;s:8:"nofollow";b:0;}s:6:"mobile";a:3:{s:7:"enabled";b:1;s:7:"tablets";b:0;s:8:"viewport";s:56:"width=device-width, initial-scale=1.0, user-scalable=yes";}s:23:"use_prepared_statements";b:1;s:11:"use_rewrite";b:1;s:7:"use_sso";b:0;s:5:"other";a:0:{}
type, host, port 값은 보이는데 user, pass는 안보이네요.
다시 modules/install/install.controller.php 144번 라인의 $config
a:22:{s:14:"config_version";s:3:"2.0";s:2:"db";a:1:{s:6:"master";a:9:{s:4:"type";s:0:"";s:4:"host";N;s:4:"port";N;s:4:"user";N;s:4:"pass";N;s:8:"database";N;s:6:"prefix";N;s:7:"charset";N;s:6:"engine";N;}}s:5:"cache";a:1:{s:15:"truncate_method";s:6:"delete";}s:3:"ftp";a:7:{s:4:"host";s:9:"localhost";s:4:"port";i:21;s:4:"path";N;s:4:"user";N;s:4:"pass";N;s:4:"pasv";b:1;s:4:"sftp";b:0;}s:6:"crypto";a:3:{s:14:"encryption_key";N;s:18:"authentication_key";N;s:11:"session_key";N;}s:6:"locale";a:5:{s:12:"default_lang";s:2:"ko";s:12:"enabled_lang";a:1:{i:0;s:2:"ko";}s:16:"auto_select_lang";b:0;s:16:"default_timezone";s:10:"Asia/Seoul";s:17:"internal_timezone";i:32400;}s:3:"url";a:5:{s:7:"default";N;s:26:"unregistered_domain_action";s:12:"redirect_301";s:9:"http_port";N;s:10:"https_port";N;s:3:"ssl";s:4:"none";}s:7:"session";a:9:{s:5:"delay";b:0;s:6:"use_db";b:0;s:8:"use_keys";b:0;s:7:"use_ssl";b:0;s:15:"use_ssl_cookies";b:0;s:6:"domain";N;s:4:"path";N;s:8:"lifetime";i:0;s:7:"refresh";i:300;}s:4:"file";a:2:{s:16:"folder_structure";i:2;s:5:"umask";s:4:"0022";}s:4:"mail";a:1:{s:4:"type";s:12:"mailfunction";}s:4:"view";a:5:{s:14:"manager_layout";s:6:"module";s:14:"minify_scripts";s:6:"common";s:14:"concat_scripts";s:4:"none";s:11:"server_push";b:0;s:8:"use_gzip";b:0;}s:5:"admin";a:2:{s:5:"allow";a:0:{}s:4:"deny";a:0:{}}s:4:"lock";a:4:{s:6:"locked";b:0;s:5:"title";s:11:"Maintenance";s:7:"message";s:0:"";s:5:"allow";a:0:{}}s:5:"debug";a:11:{s:7:"enabled";b:1;s:16:"log_slow_queries";i:0;s:17:"log_slow_triggers";i:0;s:16:"log_slow_widgets";i:0;s:24:"log_slow_remote_requests";i:0;s:12:"log_filename";N;s:12:"display_type";a:1:{i:0;s:7:"comment";}s:15:"display_content";a:0:{}s:10:"display_to";s:5:"admin";s:15:"write_error_log";s:5:"fatal";s:5:"allow";a:0:{}}s:3:"seo";a:8:{s:10:"main_title";s:0:"";s:13:"subpage_title";s:0:"";s:14:"document_title";s:0:"";s:10:"og_enabled";b:0;s:22:"og_extract_description";b:0;s:17:"og_extract_images";b:0;s:19:"og_extract_hashtags";b:0;s:17:"og_use_timestamps";b:0;}s:11:"mediafilter";a:3:{s:6:"iframe";a:0:{}s:6:"object";a:0:{}s:7:"classes";a:0:{}}s:8:"security";a:2:{s:16:"check_csrf_token";b:0;s:8:"nofollow";b:0;}s:6:"mobile";a:3:{s:7:"enabled";b:1;s:7:"tablets";b:0;s:8:"viewport";s:56:"width=device-width, initial-scale=1.0, user-scalable=yes";}s:23:"use_prepared_statements";b:1;s:11:"use_rewrite";b:0;s:7:"use_sso";b:0;s:5:"other";a:0:{}
기 설정되어있던 type, host, port 값 마저 없어져버렸습니다.
참고로 XE는 설치하는데 문제가 없습니다.
설치 환경은 이렇습니다.
$ php -m
[PHP Modules]
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
imagick
intl
json
libxml
mbstring
mcrypt
mysqli
odbc
openssl
pcntl
pcre
PDO
pdo_dblib
pdo_mysql
PDO_ODBC
pdo_pgsql
pdo_sqlite
pgsql
Phar
posix
readline
Reflection
session
shmop
SimpleXML
sockets
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xml
xmlreader
xmlrpc
xmlwriter
xsl
zip
zlib
저도 평소에 문제없이 사용하던 환경에서 최신버전 라이믹스 설치 에러가 발생하였습니다.
말씀하신대로 install페이지에서 넘어온 config값이 사라지는게 문제이고
이는 크롬에서만 발생하고 IE에서는 발생하지 않았습니다.
시간이 없어서 크롬 확장프로그램 등 다른 외부적인 요인은 확인해보지 못했습니다.
확장프로그램 탓은 아닌 것같습니다. 확장프로그램을 몽땅 삭제하고 해도 같은 증상입니다.
IE에서 똑같은 현상입니다.
500에러
이제 생각해보니 사이트 세션이나 쿠키가 잘못 오작동하는 것 같기도 하네요.
지금 재현할 수 있는 서버가 없어서 더이상 확인은 못했습니다.
apache 설정에서 user, group을 nobody로 변경한 것이 화근이었습니다.
/var/lib/php/session 권한을 nobody로 변경하고 끝났다고 생각했었는데 어느 순간 apache로 돌아가더군요.
apache와 noody 사이에서 잠시 오락가락했었습니다.
참고로 그 전단계인 procDBConfig()에서는 정상적으로 동작합니다.
O:7:"DBMySQL":22:{s:6:"prefix";s:3:"rx_";s:14:"comment_syntax";s:8:"/* %s */";s:7:"charset";s:4:"utf8";s:11:"column_type";a:8:{s:9:"bignumber";s:6:"bigint";s:6:"number";s:6:"bigint";s:7:"varchar";s:7:"varchar";s:4:"char";s:4:"char";s:4:"text";s:4:"text";s:7:"bigtext";s:8:"longtext";s:4:"date";s:11:"varchar(14)";s:5:"float";s:5:"float";}s:9:"last_stmt";N;s:6:"params";a:0:{}s:12:"*master_db";a:9:{s:4:"type";s:5:"mysql";s:4:"host";s:9:"localhost";s:4:"port";s:4:"3306";s:4:"user";s:5:"soonj";s:4:"pass";s:6:"xxxx";s:8:"database";s:6:"rhymix";s:6:"prefix";s:3:"rx_";s:8:"resource";O:6:"mysqli":19:{s:13:"affected_rows";N;s:11:"client_info";N;s:14:"client_version";N;s:13:"connect_errno";N;s:13:"connect_error";N;s:5:"errno";N;s:5:"error";N;s:10:"error_list";N;s:11:"field_count";N;s:9:"host_info";N;s:4:"info";N;s:9:"insert_id";N;s:11:"server_info";N;s:14:"server_version";N;s:4:"stat";N;s:8:"sqlstate";N;s:16:"protocol_version";N;s:9:"thread_id";N;s:13:"warning_count";N;}s:12:"is_connected";b:1;}s:11:"*slave_db";a:1:{i:0;a:7:{s:4:"type";s:5:"mysql";s:4:"host";s:9:"localhost";s:4:"port";s:4:"3306";s:4:"user";s:5:"soonj";s:4:"pass";s:6:"expert";s:8:"database";s:6:"rhymix";s:6:"prefix";s:3:"rx_";}}s:9:"*result";N;s:8:"*errno";i:0;s:9:"*errstr";s:0:"";s:8:"*query";s:0:"";s:13:"*connection";s:18:"master (localhost)";s:15:"*elapsed_time";i:0;s:23:"*elapsed_dbclass_time";i:0;s:22:"*transaction_started";b:0;s:15:"*is_connected";b:0;s:13:"*cache_file";s:20:"files/cache/queries/";s:7:"db_type";s:5:"mysql";s:10:"db_version";s:15:"10.1.37-MariaDB";s:23:"use_prepared_statements";N;s:25:"*transactionNestedLevel";i:0;}