software‎ > ‎módulos‎ > ‎engine‎ > ‎manuais‎ > ‎

Scripts Em Disco

Introdução

O objetivo do projeto é permitir o uso no Engine de scripts em disco, ou seja, scripts que não estão armazenados na iVFS.

Virtual File System x Union File System

O Engine possui, além da Virtual File System, um outro sistema de arquivos, o Union File System. Ao contrário da VirtualFS, que está no banco de dados e é replicado para todos os Engines, através do cache local, o UnionFS é configurado localmente no Engine, possibilitando que duas instâncias do Engine tenham UFS distintos, apesar de estarem usando uma mesma base.

O UFS é configurado através do arquivo de configuração do Engine iengine.conf, podendo ser editado diretamente no disco, ou pela interface Manager do Engine, em configuration/others.

<UnionFS>
    # Se habilitado, os arquivos JAZ que estiverem na VFS serão copiados para o disco e incluídos
    IncludeVFSJazArchives on
    # Pastas e arquivos jaz que são incluídos no UnionFS
    Directory c:\myrepository   
</UnionFS>

A seção UnionFS do arquivo de configuração define a pasta no disco raiz da UFS. Em breve veremos que podemos ter mais de uma pasta.

Union File System

A Union File System permite a utilização de mais de uma pasta raiz. Ela faz um merge das pastas, dando uma visão de um único sistema de arquivos.

Suponhamos que temos dois repositórios, o repositório usado para o desenvolvimento de uma biblioteca libX, e o repositório usado para o desenvolvimento de uma outra biblioteca libY.

directory 1

c:\
    projetoX\
    engine\
    libx\
        scriptx.js

directory 2

c:\
    projetoY\
    engine\
    libY\
        scripty.js

Caso queiramos trabalhar com esses dois repositórios ao mesmo tempo, devemos incluir-los no arquivo de configuração da seguinte forma:

<UnionFS>
    # Se habilitado, os arquivos JAZ que estiverem na VFS serão copiados para o disco e incluídos
    IncludeVFSJazArchives on
    # Pastas e arquivos jaz que são incluídos no UnionFS
    Directory c:\projetoX
    Directory c:\projetoY
<UnionFS>

Com isso, a UnionFS fica da seguinte forma:

/
    engine/
        libx/
            scriptx.js
        liby/
            scripty.js

Arquivo de Manifesto

Algumas configurações do repositório podem ser definidas em um arquivo json nomeado jazmanifest.json contido na raiz do repositório.

manifest.json

{
    encoding: 'UTF-8'
}

Codificação de caracteres

Os arquivos armazenados em disco utilizam por padrão a codificação Windows-1252. Opcionalmente, também pode-se utilizar arquivos em codificação UTF-8. Para definir a codificação use a propriedade encoding, os valores suportados atualmente são ISO-8859-1 e UTF-8.

Em versões anterioes a 13.10 era possível definir esta configuração com a criação de um arquivo com o nome .ufs#utf8 na raiz do diretório. Apesar de ainda suportada, está configuração não deve ser utilizada e seu comportamento é sobreescrito pela configuração presente no manifesto, se este existir.

IncludeOnce e Include como funções

Para termos compatibilidade com a sintaxe padrão do Javascript, implementamos no Engine 11 as funções__includeOnce() e __include(). A sintaxe é:

__includeOnce(uri); 
__include(uri);

onde uri é uma string com o path do arquivo, ou

__includeOnce(key);
__include(key);

onde key é o número da chave de um script na Virtual File System.

A forma antiga de incluir scripts, usando as palavras reservadas includeOnce e include ainda é suportada.

Informando o Esquema

Quando estamos na VFS e desejamos incluir um script da UFS, devemos informar o esquema na uri passado à função includeOnce. Por exemplo, caso um script nossa na VFS dependa de um script localizado na raiz da UFS, usamos esse método da seguinte forma:

__includeOnce("ufs:script.js");

Não é necessário informar o esquema, caso ele seja o mesmo do script que o inclui. Por exemplo, se o script do nosso exemplo anterior,script.js, necessita incluir um outro script da raiz da UFS, ele pode invocar a função diretamente:

__includeOnce("aux.js");

URIs relativas e top-level

Para carregarmos um script localizado na mesma pasta de outro, podemos usar uma URI relativa. URIs relativas são iniciadas por "./" para scripts na mesma pasta, ou "../" para scripts na pasta de nível imediatamente acima.

__includeOnce("./aux.js"); // inclui o script aux.js, na mesma pasta
__includeOnce("../master.js"); // include o script master.js, localizado na pasta superior

Quando desejamos definir completamente o caminho de um script, usamos URIs top-level. Elas iniciam com o nome da pasta raiz, sem a "/". Por exemplo:

__includeOnce("pasta/script.js");

Arquivos JAZ

Os scripts em disco também podem estar armazenados em um arquivo compactado, no formato zip. O Engine 11 definiu um novo Mime Type, para os arquivos com a extensão jaz, para ser usado para esses arquivos. Você deve informar o caminho completo dos arquivos Jazno arquivo de configuração.

<UnionFS>
    # Se habilitado, os arquivos JAZ que estiverem na VFS serão copiados para o disco e incluídos
    IncludeVFSJazArchives on
    # Pastas e arquivos jaz que são incluídos no UnionFS
    Directory c:\projetoX
    JazArchive c:\projetoY.jaz
</UnionFS>

Assim como diretórios, você também pode informar vários arquivos Jaz no arquivo de configuração.

Habilitando Configurações da UnionFS

Todas as opções de configuração da UnionFS presentes no arquivos iengine.conf somente tem efeito se forem executadas num Script da classe Configuração/Inicialização do Engine. Recomenda-se a criação de um script positivo dessa classe apenas nas bases de Desenvolvimento. No script, deve ser executado o seguinte comando:

ngin.ufs.configureWithLocalSettings(engine.unionFS);

Distribuindo arquivos Jaz

Para distribuir os arquivos Jaz para os outros Engines que acessam uma determinada base, você deve subir os arquivos para qualquer pasta na árvore de produtos na iVFS. O Engine automaticamente copia esses arquivos para um diretório privado, dentro da pasta aonde o Engine foi instalado, e o inclui na UnionFS, sem a necessidade de alterarmos o arquivo de configuração.