Impossível criar imagem web_only para uma instalação nova

Olá :blush:

Ainda estou tentando configurar nosso pipeline para funcionar com o Discourse.
Tenho um container Redis fresco e um container Postgres fresco para usar com o Discourse.
O próximo passo para mim é construir a imagem do container web_only para então conectá-los e iniciar a instalação, se eu estiver correto, mas não consigo fazer o bootstrap do container.

Estou recebendo este erro:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 4632 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
0e576a9672a887d23579100756224f920ab595b819874b5e7cbe4868f4234481
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.

Estou confuso sobre por que está tentando fazer a migração quando ainda não tenho nada construído. Estou fazendo os passos de forma errada?
Este é o web_only.yml que estou usando (um bem básico):

templates:
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
env:
  LANG: en_US.UTF-8
  UNICORN_WORKERS: 2
  DISCOURSE_DB_USERNAME: root
  DISCOURSE_DB_PASSWORD: my-secret-pw
  DISCOURSE_DB_HOST: 127.0.0.1
  DISCOURSE_DB_NAME: communities
  DISCOURSE_DEVELOPER_EMAILS: 'email@mail.com'
  DISCOURSE_HOSTNAME: 'localhost'
  DISCOURSE_REDIS_HOST: 127.0.0.1
  SKIP_POST_DEPLOYMENT_MIGRATIONS: 1
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - mkdir -p plugins
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-voting.git
          - git clone https://github.com/discourse/discourse-slack-official.git
          - git clone https://github.com/discourse/discourse-assign.git
run:
  - exec:
      cd: /var/www/discourse
      cmd:
        - sed -i 's/GlobalSetting.serve_static_assets/true/' config/environments/production.rb
        - bash -c "touch -a /shared/log/rails/{sidekiq,puma.err,puma}.log"
        - bash -c "ln -s /shared/log/rails/{sidekiq,puma.err,puma}.log log/"
        - sed -i 's/default \$scheme;/default https;/' /etc/nginx/conf.d/discourse.conf

Preciso ter um container Postgres e um container Redis em execução toda vez que precisar fazer o bootstrap de uma build? Pensei que poderia preparar as imagens para fazer o upload delas eu mesmo e depois reexecutar meus ambientes com elas sem a necessidade de fazer algo no meu banco de dados…

O pipeline que me pediram para construir é:

  • Github actions: que pode fazer o bootstrap da imagem caso uma atualização seja necessária.
    • Enviar a imagem para um registro privado.
  • Em seguida, meu cluster Kubernetes pode obter atualizações e implantá-las em meus ambientes, do dev ao prod.

Obrigado novamente por toda a ajuda e suporte. :sparkles:

Acho que o problema é que o 127 não funciona dentro do container. O processo de inicialização migra o banco de dados. Se você não quiser migrar seu banco de dados, precisará alterar o modelo ou usar um banco de dados scratch.

2 curtidas

Obrigado pela sua resposta :slight_smile:
Você pode me dizer como evitar/pular uma migração de banco de dados, por favor? Eu pensei que fosse com SKIP_POST_DEPLOYMENT_MIGRATIONS: 1

Não é possível. Recomendo que você crie um banco de dados temporário que será destruído após a migração.

E, ao fazer isso, você precisará garantir que todas essas ações ocorram quando você implantar a nova imagem.

O ponto é que não entendo por que uma migração de banco de dados está ocorrendo quando não há nada para migrar, pois estou criando minha primeira imagem para uma instalação nova :frowning:

1 curtida

Migration é um termo técnico usado no contexto do Rails. As migrations criam basicamente a estrutura correta do banco de dados.

2 curtidas

O Discourse não pode ser executado se o banco de dados não estiver preenchido com as tabelas e os dados necessários. Além disso, é necessário pré-compilar os ativos. Você precisará entender como eles funcionam se for tentar implantar de outra forma.

1 curtida

Obrigado por esclarecer para mim. Eu pensei que a primeira estrutura do banco de dados pudesse ser feita no primeiro lançamento do fórum.

Muito obrigado pela resposta. Vou continuar pensando sobre isso. Parece que talvez não seja possível preparar um pipeline da maneira que eu preciso. :frowning:

É possível, mas você precisaria fazer isso explicitamente. E a maneira mais fácil de construir a imagem é deixá-la migrar um banco de dados vazio.

1 curtida

Vou tentar convencer minha equipe a solicitar um banco de dados Postgres temporário durante o pipeline do GitHub então. Muito obrigado por toda a ajuda.

1 curtida