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.
If your project requires additional Python dependencies, or more recent releases, you can define a requirements.txt file in the root of your branches listing them. The platform will take care to install these dependencies in your containers. The pip requirements specifiers documentation can help you write a requirements.txt file. To have a concrete example, check out the requirements.txt file of Odoo.
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:
If your project is configured to use Odoo 10.0, the Odoo server runs with Python 2.7.
If your project is configured to use Odoo 11.0 or above, the Odoo server runs with 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;
ROLLBACKNesse 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;
COMMITNo entanto, não se esqueça de fazer commit 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:
use the Odoo shell,
$ 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'install a module,
$ odoo-bin -i sale --stop-after-initupdate a module,
$ odoo-bin -u sale --stop-after-initrun the tests for a module,
$ odoo-bin -i sale --test-enable --log-level=test --stop-after-initNos comandos acima, o argumento:
--stop-after-init will immediately shutdown the server instance after it completed the operations you asked.
Há mais opções disponíveis e detalhadas em Documentação de 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 {BRANCH}
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/{BRANCH}', '/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.
É 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.
pdb is installed by default in every container.
If you want to use pudb or ipdb you have to install it before.
Para fazer isso, você tem duas opções:
temporary (only in the current build):
$ pip install pudb --user
ou
$ pip install ipdb --user
permanent: add pudb or ipdb to your project requirements.txt file.
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 shellPor fim, através da shel do Odoo, você pode acionar o trecho de código/função/método que deseja depurar.