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
ouipdb
ao arquivorequirements.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.