Symfony Framework.lock 与 .env 设置

问题描述 投票:0回答:1

问题

我需要使用

framework.lock
设置 2 个以上 memcached 服务器的 Symfony Framework.yaml 参数
.env
。但是当我尝试这样做时,它无法识别 2 台服务器,而只能识别 1 台并且出现故障。

Symfony 锁文档:https://symfony.com/doc/current/lock.html

我尝试过的(带有代码片段):

通过.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
  }

直接传递给
lock
参数

  • 如果我将值直接传递给
    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?

php symfony yaml locking phpdotenv
1个回答
0
投票

lock: '%env(MEMCACHE_SERVERS)%'
lock: ['memcached://m1.docker:11211','memcached://m2.docker:11211']
对我来说看起来很不同 - 我认为数组在这里有所不同。

请尝试设置环境变量,使其包含一个数组:

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

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

framework:
   lock: '%env(json:MEMCACHE_SERVERS)%'
© www.soinside.com 2019 - 2024. All rights reserved.