问题

我需要使用.env设置symfony Framework.yaml参数framework.lock和2+Memcached服务器.但当我try 这样做时,它无法识别2台服务器,但只识别了一台服务器,并且出现了故障.

Symfony Lock Docs:https://symfony.com/doc/current/lock.html

我try 过的(使用代码片段):

Passing via .env

  • 我有.env个文件,内容如下:
MEMCACHE_SERVERS='memcached://m1.docker:11211,memcached://m2.docker:11211'
  • framework.yaml个文件,内容如下:
framework:
    lock: '%env(MEMCACHE_SERVERS)%'
  • 让下面的controller method来查看创建的锁对象作为调试
    /**
     * @Route("/example")
     */
    public function exampleAction(LockFactory $lockFactory): JsonResponse
    {
        dd($lockFactory->createLock('testing-lock', 2));
    }
  • 它让我跟在后面.其中host个被识别为m1.docker:11211,memcached"个,第二个甚至没有被检测到.
-store: Symfony\Component\Lock\Store\MemcachedStore {#22171 ▼
    -memcached: Memcached {#23004 ▼
      servers: array:1 [▼
        0 => array:3 [▼
          "host" => "m1.docker:11211,memcached"
          "port" => 11211
          "type" => "TCP"
        ]
      ]
      options: {▶}
    }
    -initialTtl: 300
    -useExtendedReturn: null
  }

Passing directly to lock parameter

  • 如果我将值直接传递给framework.lock,而不使用.env.它起作用了.
lock: ['memcached://m1.docker:11211','memcached://m2.docker:11211']
  • 结果:
  -store: Symfony\Component\Lock\Store\CombinedStore {#22386 ▼
    -stores: array:2 [▼
      0 => Symfony\Component\Lock\Store\MemcachedStore {#23199 ▼
        -memcached: Memcached {#22471 ▼
          servers: array:1 [▼
            0 => array:3 [▼
              "host" => "m1.docker"
              "port" => 11211
              "type" => "TCP"
            ]
          ]
          options: {▶}
        }
        -initialTtl: 300
        -useExtendedReturn: null
      }
      1 => Symfony\Component\Lock\Store\MemcachedStore {#22514 ▼
        -memcached: Memcached {#22625 ▼
          servers: array:1 [▼
            0 => array:3 [▼
              "host" => "m2.docker"
              "port" => 11211
              "type" => "TCP"
            ]
          ]
          options: {▶}
        }
        -initialTtl: 300
        -useExtendedReturn: null
      }
    ]

问题

这个问题.如何使用.env将2+Memcached服务器传递给Framework.lock?

推荐答案

对我来说,lock: '%env(MEMCACHE_SERVERS)%'lock: ['memcached://m1.docker:11211','memcached://m2.docker:11211']看起来非常不同--我认为数组在这里造成了不同.

请try 设置环境变量,使其包含数组:

MEMCACHE_SERVERS='["memcached://m1.docker:11211","memcached://m2.docker:11211"]'

然后,配置锁,使其解析给定的数组:

framework:
   lock: '%env(json:MEMCACHE_SERVERS)%'

Php相关问答推荐

PHP邮件表单无法识别重音/特殊字符

Msgraph-sdk-php v2如何从返回对象中获取数据?

为什么正则表达式与得到的文本块之前得到的也行?

使用列入黑名单的单词和自定义业务逻辑的组合将特定的子字符串包装在HTML标记中

SendGrid响应PHP

是否重新排序多维数组元素以将所有子数组中的子数组移动到元素列表的底部?

Laravel区分大小写搜索

PHP -将字符串拆分为两个相等的部分,但第二个字符串中的单词更多

Laravel 10中的Validator类

curl_close()未从PHP 8开始写入CURLOPT_COOKIEJAR会话文件

在WooCommerce循环中添加子类别和产品之间的分隔符

如何处理 Null 上的 array_shift() ?

添加或删除优惠券后自动刷新 WooCommerce checkout 表单字段

显示时间范围内的可用空位,同时考虑已预订的空位

Laravel 测试 assertJsonMissing 不适用于唯一的键.为什么?

如何在 Process facade 中转义特殊字符?

列表不在 GROUP BY 子句中并且包含 X2CRM 中的非聚合列

基于其他数组创建多维数组 struct

升级到 PHP 8.2:ksort 和 krsort 更改

如何将 2021-04-08T22:25:09.335541Z 作为时间戳保存到 Laravel 中的数据库中?