Advanced topics¶
This section covers advanced features of Odoo.sh related to containers, Git submodules, and scheduled actions.
Contêineres¶
Each build is isolated in its own container (Linux namespace container). The base is an Ubuntu-based system on which all of Odoo’s required dependencies, as well as common, useful packages, are installed.
If your project requires additional Python dependencies or more
recent releases, you can define a requirements.txt file at the root of your branches that
lists them. The platform will ensure these dependencies are installed in your containers.
Veja também
For a concrete example, check out the Odoo Community requirements.txt file.
Nota
The requirements.txt files of submodules are also
taken into account. The platform looks for such files in the parent folder of each folder
containing an Odoo module.
Estrutura do diretório¶
As the containers are Ubuntu-based, their directory structure follows the Filesystem Hierarchy Standard.
Veja também
The directories relevant to Odoo.sh are the following:
.
├── home
│ └── odoo
│ ├── backup.daily
│ ├── 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
│ └── 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
└── usr
├── lib
│ └── pythonX.XX
│ └── dist-packages Python X.XX standard libraries
├── local
│ └── lib
│ └── pythonX.XX
│ └── dist-packages Python X.XX third-party libraries
└── usr
└── bin
└── pythonX.X Python X.XX executable
Shell da base de dados¶
While accessing a container with the shell, you can access the database using the psql command.
odoo@odoo-master-1.odoo.sh:~$ psql
psql (16.9)
Type "help" for help.
odoo-master-1=>
Aviso
Always use transactions (e.g.,
BEGIN (…) COMMIT / ROLLBACK) when an SQL statement leads to changes (e.g., UPDATE,
DELETE, ALTER, etc.) , especially for your production database. The transaction mechanism is
your safety net in case of a mistake. You simply have to rollback your changes to revert your
database to its previous state.
Do not forget to commit or roll back transactions. Open transactions may lock records in your tables, and a running database may wait for them to be released, causing a server to hang indefinitely.
In addition, use your staging databases to test your statements first. It gives you an extra safety net.
Example
You forgot to set your WHERE condition. In such a case, you can rollback to revert the
unwanted change:
odoo-master-1=> BEGIN;
BEGIN
odoo-master-1=> UPDATE res_users SET password = '***';
UPDATE 457
odoo-master-1=> ROLLBACK;
ROLLBACK
Then, rewrite the statement and commit the change:
odoo-master-1=> BEGIN;
BEGIN
odoo-master-1=> UPDATE res_users SET password = '***' WHERE id = 1;
UPDATE 1
odoo-master-1=> COMMIT;
COMMIT
Executar um servidor do Odoo¶
You can start an Odoo server instance from a container shell. You won’t be able to access it from the outside world with a web browser, but you can, for example:
Use 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'
Instale um módulo:
odoo-bin -i sale --without-demo=all --stop-after-initDica
O argumento
--without-demo=allimpede que dados de demonstração sejam carregados para todos os módulos.O argumento
--stop-after-initdesliga imediatamente a instância do servidor após a conclusão da operação.
Atualize um módulo:
odoo-bin -u sale --stop-after-init
Execute os testes de um módulo:
odoo-bin -i sale --test-enable --log-level=test --stop-after-init
Veja também
Para encontrar o caminho dos addons usado pelo Odoo.sh para executar seu servidor, procure por “odoo: addons paths” nos registros (~/logs/odoo.log).
2025-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 18.0
2025-02-19 10:51:39,268 4 INFO ? odoo: Using configuration file at /home/odoo/.config/odoo/odoo.conf
2025-02-19 10:51:39,268 4 INFO ? odoo: addons paths: ['/home/odoo/data/addons/18.0', '/home/odoo/src/user', '/home/odoo/src/enterprise', '/home/odoo/src/themes', '/home/odoo/src/odoo/addons', '/home/odoo/src/odoo/odoo/addons']
Aviso
As operações realizadas em uma instância do servidor Odoo não são isoladas; as alterações serão refletidas no banco de dados. Lembre-se de sempre realizar testes em suas bases de dados de teste.
Depuração no Odoo.sh¶
Nota
Depurar uma compilação do Odoo.sh não é muito diferente de depurar outro aplicativo Python. Sendo assim, o objetivo desta seção é abordar as especificidades e limitações da plataforma Odoo.sh, partindo do princípio de que você já sabe como usar um depurador.
Você pode usar pdb, pudb ou ipdb para depurar código no Odoo.sh. Como o servidor é executado fora de um shell, não é possível iniciar o depurador diretamente pelo backend do Odoo, pois ele requer um shell para funcionar.
O pdb está instalado por padrão em todos os contêineres.
Dica
Para usar pudb ou ipdb, é necessário instalá-los:
permanentemente, adicionando
pudbouipdbao arquivorequirements.txtdo seu projeto, outemporariamente (somente na compilação atual), executando o comando relevante:
pip install pudb --user
pip install ipdb --user
Para acionar o depurador, adicione o seguinte ao código que deseja depurar:
import sys if sys.__stdin__.isatty(): import pdb; pdb.set_trace()
Nota
A condição
sys.__stdin__.isatty()é uma solução alternativa para detectar se você está executando o Odoo a partir de um shell.Em seguida, salve o arquivo e execute o shell do Odoo:
odoo-bin shell
Use o shell do Odoo para acionar o código que deseja depurar.
Submódulos¶
Submódulos do Git permitem vincular repositórios externos diretamente ao seu projeto sem copiar e colar código, simplificando a implantação ao clonar as dependências junto com seu código-base principal. Você mantém um controle preciso de versões ao escolher ramos exatos e fixar revisões de commit específicas para atualizar quando desejar.
No Odoo.sh, a plataforma detecta automaticamente os submódulos e os adiciona ao seu caminho de complementos para instalação do banco de dados, desde que você configure uma chave de implantação nas configurações do seu projeto e repositório ao integrar repositórios privados.
Adicionar um submódulo¶
Nota
Atualmente, não é possível adicionar repositórios privados com o Odoo.sh. No entanto, você pode fazer isso com o Git.
Na visualização Ramificações do seu projeto Odoo.sh, escolha a ramificação na qual deseja adicionar um submódulo.
No canto superior direito, clique em Submódulo e, em seguida, em Executar no Odoo.sh.
Na caixa de diálogo, preencha o seguinte:
URL do repositório: o URL SSH do repositório
Dica
No GitHub, clique em Clone, selecione SSH e copie o URL.
Ramificação: a ramificação específica que deve ser usada
Caminho: a pasta na qual o submódulo deve ser adicionado em sua ramificação
Em um terminal, na pasta em que seu repositório Git está clonado, faça checkout da ramificação na qual deseja adicionar um submódulo:
git checkout <branch>
Adicione o submódulo:
git submodule add -b <branch> <git@yourprovider.com>:<username/repository.git> <path>
<git@yourprovider.com>:<username/repository.git>: o URL SSH do repositório que você deseja adicionar como submódulo
<branch>: a ramificação que você deseja usar no repositório acima
<path>: a pasta na qual você deseja adicionar esse submódulo
Faça o commit e o push das alterações:
git commit -a && git push -u <remote> <branch><remote>: o repositório no qual você deseja fazer o push de suas alterações. Em uma configuração padrão do Git, esse é o origin.
<branch>: a ramificação na qual você deseja fazer o push de suas alterações. Provavelmente, a ramificação que você fez checkout na primeira etapa.
Dica
Ao adicionar um repositório que contém muitos módulos, talvez você queira ignorar alguns deles, caso sejam instalados automaticamente. Para fazer isso, adicione um . como prefixo na pasta do seu submódulo (por exemplo, .pasta). A plataforma ignorará essa pasta, e você poderá selecionar manualmente os módulos criando links simbólicos para eles a partir de outra pasta.
Ações agendadas¶
Na plataforma Odoo.sh, as ações agendadas são implementadas de forma um pouco diferente de um servidor Odoo comum e são executadas com base no melhor esforço. Isso ocorre porque pode haver vários clientes no mesmo servidor, e cada cliente tem garantida uma parte justa dos recursos do servidor. Portanto, não é possível garantir um horário exato de execução para as ações agendadas.
Importante
Não espere que nenhuma ação agendada seja executada com mais frequência do que a cada cinco minutos.
Como o tempo de execução das ações agendadas é limitado, é recomendável garantir que suas ações agendadas:
Trabalhem em pequenos lotes de registros.
Confirmem o trabalho após processar cada lote, para que, se forem interrompidas pelo limite de tempo, não precisem recomeçar do zero.
Sejam idempotentes, ou seja, não devem causar efeitos colaterais caso sejam iniciadas com mais frequência do que o esperado.