Desenvolvendo com Docker
Como o Discourse é executado em Docker, você deve ser capaz de rodar o Discourse diretamente do seu diretório de origem usando um contêiner de desenvolvimento do Discourse.
Prós: Não há necessidade de instalar dependências do sistema, nenhuma configuração é necessária para configurar rapidamente um ambiente de desenvolvimento.
Contras: Será um pouco mais lento que o ambiente de desenvolvimento nativo no Ubuntu, e muito mais lento que uma instalação nativa no MacOS.
Veja também Developing Discourse using a Dev Container
Passo 1: Instalar Docker
Ubuntu
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce
19.10
sudo apt-get install docker.io
sudo usermod -a -G docker $USER
sudo reboot
Windows WSL: Ubuntu
Você pode executar os comandos acima dentro do WSL, mas deve ter todos os arquivos dentro do sistema de arquivos do WSL. Por exemplo, funciona bem se estiver dentro de ~/discourse, mas falha se estiver localizado dentro de /mnt/c/discourse.
MacOS
A imagem docker de desenvolvimento do Discourse está disponível apenas para arquiteturas x86_64. Macs M1 são capazes de iniciar a imagem usando emulação de arquitetura, mas é improvável que o Discourse inicie devido à falta de suporte a inotify no QEMU.
Em vez disso, você deve usar Install Discourse on macOS for development
Opção 1: Baixar um .dmg empacotado da Docker store
Opção 2: brew install docker
Passo 2: Iniciar Contêiner
Clone o repositório Discourse no seu dispositivo local.
git clone https://github.com/discourse/discourse.git
cd discourse
(a partir da sua raiz de origem)
d/boot_dev --init
# aguarde enquanto:
# - as dependências são instaladas,
# - o banco de dados é migrado, e
# - um usuário administrador é criado (você precisará interagir com isso)
# Em um terminal:
d/rails s
# E em um terminal separado
d/ember-cli
…então abra um navegador em http://localhost:4200 e voilà!, você deverá ver o Discourse.
Symlinks de Plugins
O fluxo de desenvolvimento Docker suporta symlinks sob o diretório plugins/, com a seguinte ressalva:
Sempre que um novo symlink de plugin for criado, o contêiner Docker deve ser reiniciado com:
d/shutdown_dev; d/boot_dev
Notas:
-
Para testar e-mails, execute o MailHog:
d/mailhog -
Se houver gems ausentes, execute:
d/bundle install -
Se for necessária uma migração de banco de dados:
d/rake db:migrate RAILS_ENV=development -
Quando terminar, você pode optar por encerrar o contêiner Docker com:
d/shutdown_dev -
Os dados são persistidos entre as invocações do contêiner no diretório
tmp/postgresda sua raiz de origem. Se por algum motivo você quiser redefinir seu banco de dados, execute:sudo rm -fr data -
Se você vir erros como “permission denied while trying to connect to Docker”, execute:
run `sudo usermod -aG docker ${USER}` sudo service docker restart -
Se você deseja expor globalmente as portas do contêiner para a rede (desativado por padrão), use:
d/boot_dev -p -
O Dockerfile vem de discourse/discourse_docker no GitHub, em particular image/discourse_dev.
Executando Testes
d/rake autospec
Para executar testes de plugins específicos, você também pode fazer algo como:
d/rake plugin:spec["discourse-follow"]
Ou até mesmo algo como isto para ser ainda mais específico:
my-machine:~/discourse$ d/shell
discourse@discourse:/src$ RAILS_ENV=test /src/bin/rspec plugins/discourse-follow/spec/lib/updater_spec.rb:37
Este documento é controlado por versão - sugira alterações no github.