5

我现在只有这个问题。每次我在树枝上做出改变时,我都必须这样做cache:clear。如果代码有问题,也不会显示错误?我该怎么办?!

4

2 回答 2

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);

并清除缓存

于 2013-07-08T16:35:59.427 回答
3

我刚刚创建了一个控制台命令来手动选择性地列出或删除树枝缓存文件,而不是运行耗时的 clear:cache 来清除所有内容。语法是:

kmlf:twig --clear --env=dev AcmeBundle::nglayout.html.twig AcmeBundle:Simple:simple3.html.twig

如果您只想列出缓存文件位置,则可以消除 --clear 标志。它似乎在 Symfony 2.3 的 prod 和 dev 环境中运行良好:

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');
    }
}
于 2015-01-30T03:45:16.863 回答