2013-07-08 39 views
4

我現在只有這個問題。每當我在我的樹枝上做出改變時,我都需要cache:clear。以及在代碼中出現錯誤時不顯示錯誤?我該怎麼辦?!Symfony2 - 查看枝條的變化必須每次都清除緩存

+1

您是否正在使用app_dev.php文件進行測試? –

+0

是的,我正在使用app_dev.php – TooTiredToDrink

+2

您是否看到底部的剖析器條或右下角的symfony徽標?還要檢查app_dev.php的第27行,它應該讀取'$ kernel = new AppKernel('dev',true);' –

回答

6

我曾多次遇到這個問題。如果您的網站正在被這麼多用戶訪問,並且您清除了緩存。我相信你的網站在新的緩存生成之前幾分鐘就關閉了。

因此,清除生產服務器上的緩存不應該是一項常規活動。 有幾個解決方法或技巧來克服這個問題:

  1. 找到您的網站流量低時的時間。可能是在夜晚的某個時間,然後清除緩存。
  2. 當您想要清除緩存時,請設置生產服務器的副本,然後計劃將公有領域IP切換到新副本以進行計時,以便用戶不能面對停機時間,並且一旦清除了實際生產中的緩存服務器。將公共域ip切換回生產服務器。
  3. 如果您對模板ietwig進行了一些更改並希望對生產進行實時更改,那麼嘗試在app/cache/prod/twig目錄中找到模板並grep模板名稱,您將獲得這些文件。除移動文件或刪除文件外,您的更改將保留在生產服務器上。

如何清除緩存

php app/console cache:clear 
chmod -R 777 app/cache 
chmod -R 777 app/logs 

替代

你要做的位於Web文件夾app.php文件中的一些變化。

變化

$kernel = new AppKernel('prod', false);  

$kernel = new AppKernel('prod', true); 

並清除緩存

+6

這個問題並沒有要求如何清除緩存,但每次他做一些代碼更改時如何避免手動執行。 – Michi

3

我剛剛創建了一個控制檯命令,選擇性地列出或手動刪除樹枝緩存文件,而不是運行耗時清除:清除所有內容的緩存。語法是:

kmlf:樹枝--clear --env =開發AcmeBundle :: nglayout.html.twig AcmeBundle:簡單:simple3.html.twig

可以消除--clear標誌,如果你只想列出緩存文件位置。它似乎在Symfony 2.3的產品和開發環境中都能很好地工作:

use Symfony\Component\Console\Command\Command; 
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; 
use Symfony\Component\Console\Input\InputArgument; 
use Symfony\Component\Console\Input\InputOption; 
use Symfony\Component\Console\Input\InputInterface; 
use Symfony\Component\Console\Output\OutputInterface; 
use Symfony\Component\Console\Output\Output; 

class TwigCacheCommand extends ContainerAwareCommand 
{ 

    public function configure() 
    { 
     $this->setName('kmlf:twig') 
     ->setDescription('selectively manage the twig cache') 

     ->addArgument(
      'names', 
      InputArgument::IS_ARRAY, 
       'Example AcmeBundle:Section:view.html.twig', 
       null 
     )->addOption('clear','c', InputOption::VALUE_NONE, 'delete cache files'); 
    } 

    public function write($output, $text) { 
     $output->writeln($text); 
    } 

    public function execute(InputInterface $input, OutputInterface $output) 
    { 

     $environment = $this->getContainer()->get('twig'); 
     $names = $input->getArgument('names'); 


     $actionName = null; 
     if ($input->getOption('clear')) { 
      $actionName = 'deleting'; 
      $action = function ($fileName) { 
       unlink($fileName); 
      }; 
     } else { 
      $actionName="path:"; 
      $action = function ($filename) { 

      }; 
     } 

     foreach ($names as $name) { 

      $fileName = $environment->getCacheFilename($name); 

      if (file_exists($fileName)) { 
       $action($fileName); 
      } else { 
       $fileName = 'not found.'; 
      } 
      $this->write($output, $actionName.' '.$name."\ncacheFile: ".$fileName); 
     } 
     $this->write($output, 'Done'); 
    } 
} 
+0

謝謝,這非常有用。 – Alsciende