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

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.

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-init
    

    Dica

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

    • O argumento --stop-after-init desliga 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

Documentação da CLI

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 pudb ou ipdb ao arquivo requirements.txt do seu projeto, ou

  • temporariamente (somente na compilação atual), executando o comando relevante:

    pip install pudb --user
    
    pip install ipdb --user
    
  1. 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.

  2. Em seguida, salve o arquivo e execute o shell do Odoo:

    odoo-bin shell
    
  3. Use o shell do Odoo para acionar o código que deseja depurar.

    pdb em execução em um shell do Odoo.sh

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.

  1. Na visualização Ramificações do seu projeto Odoo.sh, escolha a ramificação na qual deseja adicionar um submódulo.

  2. No canto superior direito, clique em Submódulo e, em seguida, em Executar no Odoo.sh.

  3. 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

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.