Pular para o conteúdo principal
Versão: 1.x

← Anterior · Voltar ao README · Próximo →

Armazenamento

Por padrão, os feeds são armazenados no disco public, e o nome do arquivo é gerado automaticamente a partir do nome da classe do feed após App\Feeds\, no formato kebab-case. Por exemplo:

# App\Feeds\UserFeed
user.xml

# App\Feeds\Sitemaps\ProductFeed
sitemaps-product.xml

Para alterar esses valores, sobrescreva a propriedade $storage e o método filename:

use DragonCode\LaravelFeed\Feeds\Feed;

class UserFeed extends Feed
{
protected string $storage = 's3';

public function filename(): string
{
return 'some/path/will/be/here.xml';
}
}

Discos compatíveis​

A geração de feeds aceita discos do Laravel que sejam resolvidos como Illuminate\Filesystem\FilesystemAdapter. Isso inclui os drivers local, s3, sftp e ftp quando os adaptadores correspondentes do Flysystem estão instalados e configurados. Adaptadores personalizados são compatíveis quando oferecem streams graváveis, movimentação de arquivos, gerenciamento e listagem de diretórios e exclusão pelo Flysystem.

aviso

Discos somente leitura e discos personalizados que implementam apenas Illuminate\Contracts\Filesystem\Filesystem não são compatíveis. Um disco personalizado que não é resolvido como Illuminate\Filesystem\FilesystemAdapter causa UnsupportedStorageDiskException antes do início da consulta do feed ao banco de dados. Um disco somente leitura do Laravel ainda é resolvido como FilesystemAdapter; por isso, a consulta do feed e o staging local terminam antes de a gravação da publicação falhar. GeneratorService envolve essa falha de armazenamento em FeedGenerationException.

Contrato dos caminhos​

  • storage() retorna o FilesystemAdapter configurado.
  • storagePath() retorna o caminho relativo ao disco usado nas operações de armazenamento, incluindo um sufixo opcional para arquivos divididos.
  • path() retorna o caminho resolvido pelo adaptador do Laravel. Para um disco local, é um caminho absoluto do sistema de arquivos. Para um disco remoto, é o caminho resolvido pelo adaptador.

Garantias de publicação​

Cada parte do feed é concluída antes do início da publicação. Em discos locais, os arquivos preparados são publicados por movimentações no sistema de arquivos sob um bloqueio exclusivo da aplicação. Se uma movimentação falhar, o Laravel Feeds tenta restaurar todos os arquivos anteriores a partir do backup temporário.

Os discos remotos recebem arquivos preparados completos por streams do Flysystem antes que os objetos publicados sejam alterados. Em seguida, a publicação move cada objeto preparado para o destino e tenta a mesma reversão em caso de falha.

aviso

Movimentações remotas podem ser implementadas como operações de copiar e excluir e podem apresentar consistência eventual. Por isso, a substituição atômica de um objeto ou de um feed dividido inteiro não é garantida. O bloqueio de publicação é local ao host da aplicação. Geradores executados em hosts diferentes precisam de um bloqueio distribuído externo se puderem publicar o mesmo feed simultaneamente.

Veja também​