Uma das grandes vantagens do Zope/Plone é o seu banco de dados ZODB, porém existem situações onde é necessário armazenar grandes quantidades de arquivos, ou arquivos muito grandes. Isso pode acarretar no crescimento desnecessário do Data.fs. Uma das soluções existentes é a utilização do produto FileSystemStorage. O que ele faz é, disponibilizar um novo tipo storage para Archetypes, onde os valores dos campos como arquivos e imagens são armazenados no sistema de arquivos.
Primeiro precisamos baixar uma versão compatível com o Plone 2.5, segundo a página do produto a versão mais atual (2.7.1) só é suportada pela versão 3 do Plone. Sendo assim vamos precisar da versão 2.7.0, disponível aqui.
Instalação:
Existem 3 maneiras de instalar o FSS.
1ª) EGG
Baixe este egg, e utilize o easy_install para instalar.
# easy_install iw.fss-2.7.0-py2.4.egg
2ª)Instalando do SVN
Não encontrei o tar.gz da versão 2.7.0, sendo assim, baixei do repositório.
# svn export http://svn.plone.org/svn/collective/iw.fss/tags/2.7.0/ iw.fss # cd iw.fss # python setup.py install
3ª) Copiando para lib/pyton
Segue os mesmos passos acima, porém, ao invés de excutar o último comando, copiamos a pasta iw para a lib/python da sua instância.
# svn export http://svn.plone.org/svn/collective/iw.fss/tags/2.7.0/ iw.fss # cd iw.fss # cp iw $INSTANCE_HOME/lib/python
Configuração
Podemos notar que o FSS já adota os padrões do zope 3, ou seja, não é simplesmente extrair seu conteúdo na pasta Products e pronto. Para que ele seja carregado necessitamos criar algums arquivos zcml.
$INSTANCE_HOME/etc/package-includes/iw.fss-meta.zcml, com a linha:
<include package="iw.fss" file="meta.zcml"/>
$INSTANCE_HOME/etc/package-includes/iw.fss-configure.zcml, com a linha:
<include package="iw.fss" />
OBS.: No Plone 2.5 pode acontecer de não existir a pasta package-include em $INSTANCE_HOME/etc, se for este o caso será necessário copiar o conteúdo de $ZOPE_HOME/lib/python/Products/Five/skel para $INSTANCE_HOME/etc.
Agora abra o arquivo $INSTANCE_HOME/lib/python/iw/fss/etc/plone-filesystemstorage.conf e defina as variáveis abaixo:
storage-path $$INSTANCE_HOME/var/fss_files backup-path $$INSTANCE_HOME/var/fss_backup storage-strategy flat
storage-path e backup-path são, respectivamente, os caminhos de onde ficarão os arquivos e os backups. Já storage-strategy é tipo de estratégia utilizada para armezar os arquivos, por enquanto vamos deixar a estratégia padrão ‘flat’.
Verifique se o FSS está diponível para instalação. Caso sim, você fez tudo corretamente. Seguindo…
Alterando o storage para arquivos e imagens
Até agora o que fizemos foi instalar e configurar o FSS, mas só isso não basta. Para que os arquivos e as imagens dos content-types padrão do Plone (News Item, File e Image) passem a utilizá-lo precisamos de mais um passo. Adcione a seguinte linha em algum dos arquivos em $INSTANCE_HOME/etc/package-includes:
<include package="iw.fss" file="atct.zcml" />
Agora reinicie o zope e adicione uma nova imagem ou arquivo e verifique na pasta que você definiu como storage e note que agora existe um arquivo lá.
Definindo tipos em produtos personalizados
Muitas vezes somente os tipos padrão do plone não suficientes, e temos que criar nossos próprios tipos. Para utilizar o FSS em nossos produtos personalizados fazemos o seguinte:
from iw.fss.FileSystemStorage import FileSystemStorage
...
my_schema = Schema((
FileField('file',
...
storage=FileSystemStorage(),
widget=FileWidget(...)
),
...
))
...
Bem simples, faça o mesmo na definição do seu tipo e o arquivo será salvo no sistema de arquivos. Para quem usa o Plone 3, os passos são parecidos, porém pode-se utilizar o buildout para facilitar ainda mais o processo.
Esse foi o meu primeiro(de muitos) tutorial, espero que gostem. t+
Caro Alexandre,
deixe-me felicita-lo antes de mais pelo seu tutorial acerca deste tema pois claramente existe muita falta de informação.
Eu estou a escrever-lhe pois estou um pouco “desesperado”…
Não sou um profissional de Web, sou apenas um professor de Física que quer por de pé um site de internet para os seus alunos…
O iw.fss pelo que percebi é o produto ideal para o meu site uma vez que actualmente o Data.fs já tem 1G e tenho que colocar várias centenas de fotos disponíveis.
Experimentei o plone2fss para converter o Data.fs e funcionou perfeitamente.
O meu problema é nas noticias. A partir do momento em que o iw.fss está instalado as noticias que não têm imagem passam a apresentar no browser o titulo da noticia no no sitio onde aparecia a imagem.
Isto quer dizer que o a condição no template da noticia
condition:”exists: item_object/image_thumbnail”
é executada com sucesso.
curiosamente o comportamento correcto é reposto quando na condição é substituído image_thumbnail por image apenas.
eu escolhi a estratégia site1 para o armazenamento. E verifico que quando uma noticia sem imagem é adicionada, é criada uma directoria com o nome da noticia e dentro existe uma directoria image com um ficheiro image.0 vazio.
Eu precisava de pôr o site de pé muito brevemente mas tenho receio de que este comportamento possa comprometer a base de dados…
Isto será um sintoma de algum bug mais profundo? Qual é a sua experiência com o iw.fss? Está satisfeito? Já tinha encontrado este problema?
Peço desculpa por estar a incomoda-lo mas realmente até agora ainda não consegui respostas de ninguém…
Com os melhores cumprimentos
João Lopes
Olá João Manuel,
Primeiramente modifiquei o local do comentário para o local “correto”.
Bom, até hoje só tive oportunidade de utilizar o iw.fss na situação seguinte: uma dos nossos sites possuia uma série de leis em PDF (mais de 4 mil), então criei um produto que utilizava o o fss para guardar esses arquivos no FileSystem.
Não sei qual é a sua situação, fica difícil dizer o que pode estar acontecendo. Porém já posso lhe dizer que existem outras soluções otimizar seu portal, como, dar um pack no Data.fs ou instalar uma ferramenta de cache como squid ou varnish.
Me passa as configurações de python, zope, plone, pra eu ter uma idéia.