Utilizando iw.fss no Plone 2.5

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+

2 thoughts on “Utilizando iw.fss no Plone 2.5

  1. 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

  2. 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.

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*


*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>