Соната Медиа CDN Rackspace

У меня следующая проблема с Sonata Media: я пытаюсь использовать CDN Rackspace для загрузки изображений: мой файл конфигурации выглядит следующим образом на основе текущей документации:

cdn:
    server:
        path: %cdn_url%
filesystem:
    local:
        directory:  %kernel.root_dir%/../web/uploads/media
        create:     false
    rackspace:
        url: %rackspace.opencloud.host%
        secret:
            username: %rackspace.opencloud.username%
            apiKey: %rackspace.opencloud.api_key%
        region: LON
        containerName: projectName
        create_container: false
    replicate:
        master: sonata.media.adapter.filesystem.opencloud
        slave: sonata.media.adapter.filesystem.local

И в конфигурации провайдеров:

  providers:
    image:
        filesystem: sonata.media.filesystem.replicate
        cdn: sonata.media.cdn.server
        resizer: sonata.media.resizer.square
        allowed_extensions: ['jpg', 'png', 'gif', 'jpeg']
        allowed_mime_types: ['image/pjpeg','image/jpeg','image/png','image/x-png', 'image/gif']

Проблема в том (как я обнаружил эту ошибку), если Rackspace не работает или на каждой странице приложения указаны неверные имя пользователя/пароль, я получаю этот ответ:

Client error response [status code] 401 [reason phrase] Unauthorized [url] https://lon.auth.api.rackspacecloud.com/v2.0/tokens

Это связано с тем, что Gaufrette Opencloud пытается создать соединение при загрузке ядра.

Самым быстрым решением в качестве временного исправления было создать проход компилятора и проверить, возвращает ли метод аутентификации false, а затем заменить аргумент 0 для определения репликации адаптером локальной файловой системы.

Мои вопросы:

  1. Как избежать создания соединения Rackspace при загрузке ядра?
  2. Если Rackspace не работает, как я могу переключаться между Rackspace или другим адаптером (локальным или другим ftp-сервером)

Заранее благодарим вас и, если предоставленной информации недостаточно, пожалуйста, оставьте комментарий.


person Gabriel Nicola    schedule 22.03.2017    source источник


Ответы (1)


По-видимому, в Gaufrette реализовано решение для ленивой загрузки: https://github.com/KnpLabs/KnpGaufretteBundle/issues/72

Все, что мне нужно было сделать, это:

sonata.media.adapter.open_stack:
    class: OpenCloud\Rackspace
    arguments: [ %rackspace.opencloud.host%, { username: %rackspace.opencloud.username%, apiKey: %rackspace.opencloud.api_key% }]
sonata.media.adapter.object_store_factory:
    class: Gaufrette\Adapter\OpenStackCloudFiles\ObjectStoreFactory
    arguments: [ @sonata.media.adapter.open_stack, "LON", ""]
sonata.media.adapter.filesystem.lazyopencloud:
    class: Gaufrette\Adapter\LazyOpenCloud
    arguments: [ @sonata.media.adapter.object_store_factory, %rackspace.opencloud.container_name%]

И измените мастер репликации на sonata.media.adapter.filesystem.lazyopencloud.

Надеюсь, поможет :)

person Gabriel Nicola    schedule 24.03.2017