How to clear Doctrine APC cache for production?

一个人想着一个人 提交于 2019-12-23 10:19:09

问题


I have this issue when I add a column to one of my entities and release it for production I have to restart Apache in order to clear Doctrine metadata APC/APCU cache.

I have tried all commands below but none worked for me:

php -r "apc_clear_cache();"
php -r "apcu_clear_cache();"

sudo php app/console doctrine:cache:clear-metadata
sudo php app/console doctrine:cache:clear-query
sudo php app/console doctrine:cache:clear-result

I get this error message for --env=prod

sudo php app/console doctrine:cache:clear-metadata  --env=prod
sudo php app/console doctrine:cache:clear-query  --env=prod
sudo php app/console doctrine:cache:clear-result --env=prod

 [LogicException]
  Cannot clear APC Cache from Console, its share in the Web server memory and not accessible from the CLI.

The only way I can get it to refresh Doctrine cache is to restart my apache server which can sometimes be an issue.

My cache settings for Doctine in my Symfony project:

doctrine:
    orm:
        metadata_cache_driver: apc
        result_cache_driver: apc
        query_cache_driver: apc
        second_level_cache:
            enabled: true
            log_enabled: false
            region_cache_driver: apc

How can I clear APC cache in this case without restarting Apache each time I release new schema update to production. This is even worse if you have many servers behind a load balancer.


回答1:


You must understand that Php running under Apache (or Nginx) is different than the Php running via the command line, they are 2 Linux process that cant communicate.

So, even if you can clear the cache via CLI, this will not affect the php under Apache.

The easiest way it to call apcu_clear_cache inside a Symfony controller, or, you can use the Apache Php socket via the CLI.

I recommend to use a tool like http://gordalina.github.io/cachetool/, which do that perfectly.




回答2:


Instead of trying to clear it from the console, try doing it from a controller or app.php.

I have this line commented in the app.php:

//apcu_clear_cache ();

When I do need to clear the cache, I just uncommented it and load any page. It works for me.




回答3:


When you run apc_clear_cache(); not from cli but from your app, doctrine cache will be cleared. You can make some button in admin panel, or send curl request to your server after each update to specified file, for example:

http://example.com/apc_cache_clear.php

inside autorize request and clear cache




回答4:


Take a look at the Smart-Core/AcceleratorCacheBundle Provide a command to clear PHP Accelerator cache from CLI.

This can permit to flush the cache as a cli command as:

php app/console cache:accelerator:clear

The doc include also a Capifony's recipe.

Hope this help



来源:https://stackoverflow.com/questions/39981501/how-to-clear-doctrine-apc-cache-for-production

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!