2015-11-06 36 views
0

我有一個網站與symfony3。一切都像魅力一樣。 有一段時間,我安裝了另一個項目,到另一個文件夾,並用composer安裝symfony(3)。多個symfony項目的瘋狂

問題來了。第一個項目有效,但第二個項目不會。 但是,如果我重新啓動FPM,並瀏覽第二個項目,它的工作原理,但第一個錯誤。 我也嘗試過使用symfony2.7。同樣

的文件夾結構是

/var/www/domain1 
/var/www/domain2 

默認爲項目所使用的相同的FPM-插座,但我想在不同的。

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 

的域2用戶存在太,和該文件夾的用戶。並且許可很好。

但日誌說(這是很奇怪的),即二次打開的項目要與其他項目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 ,有一些非常糟糕的事情。但作爲我的同事,我不知道這到底是什麼。

有人有線索嗎?

回答

1

好吧,我不知道您的具體設置,但我的猜測是以下幾點:

  • 你從Symfony的2.x版本升級Symfony3項目
  • 您在Symfony應用程序的web/app.php中使用ApcCacheLoader

如果上述屬實,有可能是您的web/app.php線,看起來像這樣:

$loader = new ApcClassLoader('sf2', $loader); 

如果你有這條線在兩個或兩個以上的Symfony安裝在同一臺服務器上,自動加載磁帶機兩個應用程序碰撞的緩存。

這是爲什麼?顧名思義,ApcClassLoader存儲APC中的文件和名稱空間列表,並且它將使用第一個構造函數參數作爲緩存鍵。

因此,顯然,您需要更改該值,然後使用app/console --env=prod重建高速緩存。也許你還必須再次運行composer install,我不確定那個。

+0

不,我用作曲家安裝3.0.0-dev版本。但解決方案並非如此。我開始搜索這段代碼,但在psr4中看起來不一樣。所以,我取消了應用程序開發中的所有行與apc,重新啓動fpm。 我發現,我沒有安裝php-apc,所以我很容易找到它。之後,開發環境開始工作,但不是生產。刪除了緩存等,但不起作用。 Sooo,我評論回app.php,並且永久作品o.0 – Mikopet