欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

cakephp的环境配置问题

程序员文章站 2022-04-16 21:58:11
...
新手求高手指导,目前在做项目,一天都没有搞定,很急。
环境:Linux(el7)+nginx(1.6.2)+mysql(5.6.23)+php(5.4.39)+cakephp(2.6.0)
web环境本身没有问题,访问http://172.16.3.91:8080/cake报错:
Warning: _cake_core_ cache was unable to write 'cake_dev_zh-cn' to File cache in /usr/share/nginx/dataCenter/lib/Cake/Cache/Cache.php on line 323

Warning: /usr/share/nginx/dataCenter/app/tmp/cache/persistent/ is not writable in /usr/share/nginx/dataCenter/lib/Cake/Cache/Engine/FileEngine.php on line 385

Fatal error: Uncaught exception 'CacheException' with message 'Cache engine _cake_core_ is not properly configured.' in /usr/share/nginx/dataCenter/lib/Cake/Cache/Cache.php:181 Stack trace: #0 /usr/share/nginx/dataCenter/lib/Cake/Cache/Cache.php(151): Cache::_buildEngine('_cake_core_') #1 /usr/share/nginx/dataCenter/app/Config/core.php(374): Cache::config('_cake_core_', Array) #2 /usr/share/nginx/dataCenter/lib/Cake/Core/Configure.php(72): include('/usr/share/ngin...') #3 /usr/share/nginx/dataCenter/lib/Cake/bootstrap.php(175): Configure::bootstrap(true) #4 /usr/share/nginx/dataCenter/app/webroot/index.php(100): include('/usr/share/ngin...') #5 {main} thrown in /usr/share/nginx/dataCenter/lib/Cake/Cache/Cache.php on line 181

1. 已经确认tmp目录上级和下面的子目录全部都设置了777权限;
2. cakephp(从官方网站下载的)除了修改了数据库配置外,其他的配置项没有动;
3. nginx.conf(参考官方文档设置的rewrite)
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/

user nobody;
worker_processes 1;

error_log /var/log/nginx/error.log info;
#error_log /var/log/nginx/error.log notice;
#error_log /var/log/nginx/error.log info;

pid /run/nginx.pid;

worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 4096;
}


http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
#tcp_nopush on;

root /usr/share/nginx/html;
#单位:秒
keepalive_timeout 100;
#keepalive_timeout 1000;

#gzip on;

index index.html index.htm;
#uwsgi_buffering off;
#uwsgi_max_temp_file_size 64m;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;

server {
listen 8080;
#server_name localhost;
server_name 172.16.3.91 shuju.baijie;
rewrite 301 http://172.16.3.91:8080$request_uri permanent;

root /usr/share/nginx/dataCenter/app/webroot;
index index.php index.html index.htm;

#charset koi8-r;
charset utf-8;

access_log /var/log/nginx/dataCenter.access.log;
error_log /var/log/nginx/dataCenter.error.log;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location / {
try_files $uri $uri/ /index.php?$args;
if (-e $request_filename) { #文件或目录存在
break;
}
if (!-e $request_filename) { #文件或目录不存在
rewrite ^/(.+)$ /index.php?url=$1 last;
break;
}
}
location ~ /\.ht { #禁止.htaccess
deny all;
}

location ~ \.php$ {
try_files $uri =404;
#这里指定了fastcgi进程侦听的端口,nginx就是通过这里与php交互的
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
}
# redirect server error pages to the static page /40x.html
#
error_page 404 /404.html;
location = /40x.html {
}

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

server {
listen 8081;
#server_name localhost;
server_name 172.16.3.91 shuju.baijie;
root /usr/share/nginx/mytest;
index index.php index.html index.htm;

#charset koi8-r;
charset utf-8;

access_log /var/log/nginx/mytest.access.log;
error_log /var/log/nginx/mytest.error.log;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location /phpmyadmin/ {
index index.php;
}
location ~ \.php$ {
#这里指定了fastcgi进程侦听的端口,nginx就是通过这里与php交互的
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
}
}
}


回复讨论(解决方案)

Warning: /usr/share/nginx/dataCenter/app/tmp/cache/persistent/ is not writable in /usr/share/nginx/dataCenter/lib/Cake/Cache/Engine/FileEngine.php on line 385
已经明确的表示说
/usr/share/nginx/dataCenter/app/tmp/cache/persistent/ 不可写
这是个目录,而写缓存应该是文件名吧

谢谢 xuzuning 的回复。
persistent确实应该是目录的,不是文件,问题应该不在这里:
383 if ($this->_init && !($dir->isDir() && $dir->isWritable())) {
384 $this->_init = false;
385 trigger_error(__d('cake_dev', '%s is not writable', $this->settings['path']), E_USER_WARNING);
386 return false;
387 }

求各位牛人关注!

找到原因了,我的php.ini中配置cgi.force_redirect原来使用的是默认值(默认打开),设置cgi.force_redirect = 0将该配置关闭后,重启nginx和php-fpm就能正确获取writeable的值了。看php.ini中该配置项的注释,当打开时,php以安全的方式运行在web服务中。