【问题标题】:symfony2 and snc-redis: how to disable it depending of environement?symfony2 和 snc-redis:如何根据环境禁用它?
【发布时间】:2015-05-06 15:59:30
【问题描述】:

我正在使用 snc-redis 缓存我的学说查询,一切正常。

由于我在团队中工作,我决定将 redis 服务器放在远程机器上,但它在连接时遇到错误“向服务器写入字节时出错 [tcp://xxx.xxx.xxx.xxx :6379"

所以我正在考虑只为生产服务器部署redis,并为我们的开发禁用它。问题在于我们使用 predis 查询缓存功能的每个存储库,这会导致问题,因为没有可用的 redis 服务。

这是我的配置:

snc_redis:
# configure predis as client
clients:
    default:
        type: predis
        alias: default
        dsn: "redis://%redis_url%"
    doctrine:
        type: predis
        alias: doctrine
        dsn: "redis://%redis_url%"
# configure doctrine caching
doctrine:
    metadata_cache:
        client: doctrine
        entity_manager: default
        document_manager: default
    result_cache:
        client: doctrine
        entity_manager: [default]
        namespace: "doctrine_result_cache_%kernel.environment%_"
    query_cache:
        client: doctrine
        entity_manager: default

【问题讨论】:

    标签: php symfony redis


    【解决方案1】:

    您可以根据环境在配置文件夹中使用特定文件放置不同的配置。

    如果将 redis 配置放在 config_prod.yml 而不是 config.yml 中,则只能在 prod 环境下使用。

    您还可以创建另一个名为 config_yourenv.yml 的文件并从不同的前端控制器加载它。

    在 app.php 中:

    require_once __DIR__.'/../app/AppKernel.php';
    //require_once __DIR__.'/../app/AppCache.php';
    
    // Change the environment you load if want.
    $kernel = new AppKernel('yourenv', false);
    

    如果您想排除捆绑包的全部负载,请将其添加到 AppKernel.php:

    if (in_array($this->getEnvironment(), array('yourenv')) {
        $bundles[] = new Path\To\SncRedisBundle();
    }
    

    希望对你有帮助。

    【讨论】:

    • 存储库中的 predis 查询缓存调用怎么样?
    • 如果你在你的仓库中使用redis,你必须有一个redis服务器。我想也许在测试环境中,您可以安装本地服务器而不是远程服务器并维护单独的配置。
    • 或者尝试捕获以检查 redis 服务器是否可用。
    • 我们使用的是远程 redis 服务器,没有本地实例。 try / catch 可能是一个钩子,但这不是真正干净的代码
    • 我同意,但我认为没有办法模拟 redis 服务器...所以,我认为您需要安装一个或在不存在时根本不使用它。对不起!
    【解决方案2】:

    我通常只为prod 环境启用任何类型的缓存。所以我建议你离开 config.yml 没有任何特定的配置,只有 snc_redis 包的基本定义。

    例如:

    config.yml

    snc_redis:
    # configure predis as client
    clients:
        default:
            type: predis
            alias: default
            dsn: "redis://%redis_url%"
    
    # Standard Doctrine Configuration
    doctrine:
        dbal:
            driver:   "%database_driver%"
            host:     "%database_host%"
            port:     "%database_port%"
            dbname:   "%database_name%"
            user:     "%database_user%"
            password: "%database_password%"
            charset:  UTF8
            # if using pdo_sqlite as your database driver, add the path in parameters.yml
            # e.g. database_path: "%kernel.root_dir%/data/data.db3"
            # path:     "%database_path%"
    
        orm:
            auto_generate_proxy_classes: "%kernel.debug%"
            auto_mapping: true
    

    config_prod.yml

    snc_redis:
    # configure predis as client
    clients:
        default:
            type: predis
            alias: default
            dsn: "redis://%redis_url%"
        doctrine:
            type: predis
            alias: doctrine
            dsn: "redis://%redis_url%"
    # configure doctrine caching
    doctrine:
        metadata_cache:
            client: doctrine
            entity_manager: default
            document_manager: default
        result_cache:
            client: doctrine
            entity_manager: [default]
            namespace: "doctrine_result_cache_%kernel.environment%_"
        query_cache:
            client: doctrine
            entity_manager: default
    

    希望有帮助

    【讨论】:

      猜你喜欢
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      相关资源
      最近更新 更多