Contêineres

Visão Geral

Cada compilação é isolada em seu próprio contêiner (contêiner com namespace do Linux).

A base é um sistema Ubuntu, no qual todas as dependências necessárias do Odoo, bem como pacotes úteis comuns, estão instaladas.

Se o seu projeto exigir dependências adicionais do Python ou versões mais recentes, você poderá definir um arquivo requirements.txt na raiz de suas ramificações listando-as. A plataforma se encarregará de instalar essas dependências em seus contêineres. A documentação dos especificadores de requisitos do pip <https://pip.pypa.io/en/stable/reference/pip_install/#requirement-specifiers>`_ pode ajudá-lo a escrever um arquivo requirements.txt. Para um exemplo concreto, dê uma olhada no arquivo requirements.txt do Odoo <https://github.com/odoo/odoo/blob/16.0/requirements.txt>`_.

Os arquivos requirements.txt dos submódulos também são levados em consideração. A plataforma procura por arquivos requirements.txt em cada pasta que contém módulos do Odoo: Não na pasta do módulo em si, mas em sua pasta principal.

Estrutura do diretório

Como os contêineres são baseados no Ubuntu, sua estrutura de diretórios segue o padrão de hierarquia do sistema de arquivos do Linux. A visão geral da árvore do sistema de arquivos do Ubuntu <https://help.ubuntu.com/community/LinuxFilesystemTreeOverview#Main_directories>`_ explica os principais diretórios.

Esses são os diretórios pertinentes do Odoo.sh:

.
├── home
│    └── odoo
│         ├── src
│         │    ├── odoo                Odoo Community source code
│         │    │    └── odoo-bin       Odoo server executable
│         │    ├── enterprise          Odoo Enterprise source code
│         │    ├── themes              Odoo Themes source code
│         │    └── user                Your repository branch source code
│         ├── data
│         │    ├── filestore           database attachments, as well as the files of binary fields
│         │    └── sessions            visitors and users sessions
│         └── logs
│              ├── install.log         Database installation logs
│              ├── odoo.log            Running server logs
│              ├── update.log          Database updates logs
│              └── pip.log             Python packages installation logs
└── usr
     ├── lib
     │    ├── python2.7
     │         └── dist-packages       Python 2.7 standard libraries
     │    ├── python3
     │         └── dist-packages       Python 3 standard libraries
     │    └── python3.5
     │         └── dist-packages       Python 3.5 standard libraries
     ├── local
     │    └── lib
     │         ├── python2.7
     │         │    └── dist-packages  Python 2.7 third-party libraries
     │         └── python3.5
     │              └── dist-packages  Python 3.5 third-party libraries
     └── usr
          └── bin
               ├── python2.7           Python 2.7 executable
               └── python3.5           Python 3.5 executable

Tanto o Python 2.7 quanto o 3.5 estão instalados nos contêineres. No entanto:

  • Se seu projeto estiver configurado para usar o Odoo 10.0, o servidor do Odoo será executado com Python 2.7.

  • Se seu projeto estiver configurado para usar o Odoo 11.0 ou superior, o servidor do Odoo será executado com Python 3.5.

Shell da base de dados

Ao acessar um contêiner com a shell, você pode acessar a base de dados usando psql.

odoo@odoo-addons-master-1.odoo.sh:~$ psql
psql (9.5.2, server 9.5.11)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

odoo-addons-master-1=>

Cuidado ! Use transações (BEGIN…COMMIT/ROLLBACK) para todas as instruções sql que levem a alterações (UPDATE, DELETE, ALTER, …), especialmente em sua base de dados de produção.

O mecanismo de transação é sua rede de segurança em caso de erro. Basta reverter suas alterações para que a base de dados volte ao estado anterior.

Por exemplo, pode acontecer de você esquecer de definir a condição WHERE.

odoo-addons-master-1=> BEGIN;
BEGIN
odoo-addons-master-1=> UPDATE res_users SET password = '***';
UPDATE 457
odoo-addons-master-1=> ROLLBACK;
ROLLBACK

Nesse caso, você pode reverter as alterações indesejadas que acabou de fazer por engano e reescrever a construção:

odoo-addons-master-1=> BEGIN;
BEGIN
odoo-addons-master-1=> UPDATE res_users SET password = '***' WHERE id = 1;
UPDATE 1
odoo-addons-master-1=> COMMIT;
COMMIT

No entanto, não se esqueça de confirmar ou reverter a transação após fazê-la. As transações abertas podem bloquear registros em suas tabelas e a base de dados em execução pode esperar que sejam liberadas. Isso pode fazer com que um servidor fique pendente indefinidamente.

Além disso, quando possível, use duas bases de dado de teste para testar as construções primeiro. Assim, há uma rede de segurança extra.

Executar um servidor do Odoo

Você pode iniciar uma instância do servidor a partir de um shell de contêiner. Não será possível acessá-lo do mundo exterior, com um navegador, mas você pode:

  • usar o shell do Odoo,

$  odoo-bin shell
>>> partner = env['res.partner'].search([('email', '=', 'asusteK@yourcompany.example.com')], limit=1)
>>> partner.name
'ASUSTeK'
>>> partner.name = 'Odoo'
>>> env['res.partner'].search([('email', '=', 'asusteK@yourcompany.example.com')], limit=1).name
'Odoo'
  • instalar um módulo,

$  odoo-bin -i sale --without-demo=all --stop-after-init
  • atualizar um módulo,

$  odoo-bin -u sale --stop-after-init
  • executar os testes de um módulo,

$  odoo-bin -i sale --test-enable --log-level=test --stop-after-init

Nos comandos acima, o argumento:

  • --without-demo=all impede que os dados de demonstração sejam carregados em todos os módulos

  • --stop-after-init encerrará imediatamente a instância do servidor após a conclusão das operações que você solicitou.

Há mais opções disponíveis e detalhadas em Documentação da CLI.

Você pode encontrar nos logs (~/logs/odoo.log) o caminho dos addons usado pelo Odoo.sh para executar seu servidor. Procure por “odoo: addons paths”:

2018-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 16.0
2018-02-19 10:51:39,268 4 INFO ? odoo: Using configuration file at /home/odoo/.config/odoo/odoo.conf
2018-02-19 10:51:39,268 4 INFO ? odoo: addons paths: ['/home/odoo/data/addons/16.0', '/home/odoo/src/user', '/home/odoo/src/enterprise', '/home/odoo/src/themes', '/home/odoo/src/odoo/addons', '/home/odoo/src/odoo/odoo/addons']

Tenha cuidado, especialmente com sua base de dados de produção. As operações que você realiza executando essa instância do servidor Odoo não são isoladas: As alterações entrarão em vigor na base de dados. Sempre faça seus testes em bases de dados de teste.

Depuração no Odoo.sh

A depuração de uma compilação do Odoo.sh não é realmente diferente de outro aplicativo Python. Este artigo explica apenas as especificidades e limitações da plataforma Odoo.sh e pressupõe que você já saiba como usar um depurador.

Nota

Se você ainda não sabe como depurar um aplicativo Python, há vários cursos introdutórios que podem ser facilmente encontrados na internet.

É possível usar pdb, pudb ou ipdb para depurar seu código no Odoo.sh. Como o servidor é executado fora de uma shell, você não pode iniciar o depurador diretamente do back-end da instância do Odoo, pois o depurador precisa de uma shell para operar.

  • O pdb está instalado por padrão em todos os contêineres.

  • Se você quiser usar o pudb ou o ipdb, será necessário instalá-lo antes.

    Para fazer isso, você tem duas opções:

    • temporário (somente na compilação atual):

      $  pip install pudb --user
      

      ou

      $  pip install ipdb --user
      
    • permanente: adicione pudb ou ipdb ao arquivo requirements.txt de seu projeto.

Em seguida, edite o código onde você quer acionar o depurador e adicione o seguinte:

import sys
if sys.__stdin__.isatty():
    import pdb; pdb.set_trace()

A condição sys.__stdin__.isatty() é um hack que detecta se você está executando o Odoo em uma shell.

Salve o arquivo e, em seguida, execute a shell do Odoo:

$ odoo-bin shell

Por fim, através da shel do Odoo, você pode acionar o trecho de código/função/método que deseja depurar.

Captura de tela do console mostrando o ``pdb`` em execução em uma shell Odoo.sh.