我有一个symfony3网站。一切都像魅力一样。 几天,我安装了另一个项目到另一个文件夹,然后用composer安装symfony(3)。
问题来了。第一个项目有效,但第二个项目无效。 但是,如果我重新启动FPM,并浏览第二个项目,它可以工作,但第一个出错了。 我也试过symfony2.7。相同的
文件夹结构是
/var/www/domain1
/var/www/domain2
默认情况下,项目使用相同的fpm-socket,但我尝试了不同的。
nginx配置如下:
server {
server_name domain1;
root /var/www/domain1/web;
location / {
try_files $uri /app.php$is_args$args;
}
location ~ ^/(app_dev|config)\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm-domain1.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ ^/app\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm-domain1.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
internal;
}
location ~ /\.ht {
deny all;
}
error_log /var/log/nginx/domain1_error.log;
access_log /var/log/nginx/domain1_access.log;
}
server {
server_name domain2;
root /var/www/domain2/web;
server_tokens off;
location / {
try_files $uri /app.php$is_args$args;
}
location ~ ^/(app_dev|config)\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm-domain2.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ ^/app\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm-domain2.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
internal;
}
location ~ /\.ht {
deny all;
}
error_log /var/log/nginx/domain2_error.log;
access_log /var/log/nginx/domain2_access.log;
}
fpm配置:
[domain1]
user = www-data
group = www-data
listen = /var/run/php5-fpm-domain1.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /
[domain2]
user = domain2
group = domain2
listen = /var/run/php5-fpm-domain2.sock
listen.owner = domain2
listen.group = domain2
listen.mode = 0660
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /
php_admin_value[error_log] = /var/log/fpm-php.domain2.log
php_admin_flag[log_errors] = on
domain2用户也存在,并且该文件夹的用户。许可是好的。
但是日志说(这很奇怪),二次打开的项目想要从另一个项目中读取o.0
我的意思是,日志是这样的:
2015/11/05 13:17:04 [error] 26029#0: *33508 FastCGI sent in stderr: "PHP message: PHP Fatal error: Class 'AppBundle\AppBundle' not found in /var/www/domain2/app/AppKernel.php on line 19
PHP message: PHP Stack trace:
PHP message: PHP 1. {main}() /var/www/domain2/web/app_dev.php:0
PHP message: PHP 2. Symfony\Component\HttpKernel\Kernel->handle() /var/www/domain2/web/app_dev.php:33
PHP message: PHP 3. Symfony\Component\HttpKernel\Kernel->boot() /var/www/domain1/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php:183
PHP message: PHP 4. Symfony\Component\HttpKernel\Kernel->initializeBundles() /var/www/domain1/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php:121
PHP message: PHP 5. AppKernel->registerBundles() /var/www/domain1/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php:435" while reading response header from upstream, client: 46.139.10.151, server: domain2, request: "GET /app_dev.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm-domain2.sock:", host: "domain2"
Sooo,有一些非常糟糕的事情。但我不知道,作为我的同事,这到底是什么。
有人有线索吗?
答案 0 :(得分:1)
好的,我不知道您的确切设置,但我的猜测如下:
ApcCacheLoader
中的web/app.php
。如果以上情况属实,则web/app.php
中可能会有一行如下所示:
$loader = new ApcClassLoader('sf2', $loader);
如果在同一服务器上的两个或多个Symfony安装中有此行,则两个应用程序的自动加载器缓存都会发生冲突。
为什么?顾名思义,ApcClassLoader
在APC中存储文件和命名空间的列表,它将使用第一个构造函数参数作为缓存键。
因此,显然,您需要更改该值,然后使用app/console --env=prod
重建缓存。也许你还必须再次运行composer install
,我不确定那个。