Começar com desenvolvimento para Discourse

Como era iniciante ao Rails e ao Ember.js, as minhas primeiras experiências a desenvolver um plugin para Discourse foram um bocado traumáticas. Com alguns truques espero conseguir facilitar a vossa vida.

Primeiro uma pequena introdução. Sem nenhuma experiência anterior com Rails ou Ember.js (o Discourse é construído com ambos) decidi tentar criar um plugin para Discourse. Encontrei alguns guias e parecia acessível. Quão difícil pode ser, certo?

Descobri que se não souberem o que estão a fazer pode ser um bocado frustrante. A maioria dos meus problemas estavam relacionadas com o workflow de desenvolvimento: problemas no ambiente de desenvolvimento e dificuldades de debugging.

Vou dar-vos alguns truques e dicas enquanto vos indico os guias existentes.

Instalar um ambiente de desenvolvimento

A primeira coisa a fazer é instalar o ambiente de desenvolvimento. Ao seguirem o guia vão estar bem encaminhados, mas descobri que sem algumas alteração a máquina virtual pode tornar-se inutilizável.

Aumentar a RAM da máquina virtual

Uma coisa que podem fazer é aumentar a RAM disponível para a máquina virtual. Para isso precisam de editar o ficheiro Vagrantfile no vosso repositório local do Discourse.

Esse ficheiro controla as definições da máquina virtual. Abram-no e procurem pela seguinte linha:

v.customize ["modifyvm", :id, "--memory", [ENV['DISCOURSE_VM_MEM'].to_i, 1024].max]

Agora aumentem o número 1024, que representa os MB de RAM da máquina virtual, para o que quiserem. Eu defini a minha para 8192.

Criar uma pasta local na máquina virtual

Vão ver esta tip mencionada por Régis Hanol nos comentários do guia acima. A máquina virtual está a usar uma pasta partilhada com o host, o que resulta numa má performance.

Se criarem uma pasta local na máquina virtual esta corre muito mais depressa.

# create an alias to synchronize the code from the shared folder to a local folder
alias sin="rsync -a --delete /vagrant ~"
# actually synchronize (can take a minute for the first run)
sin
# switch to the local folder
cd ~/vagrant
# standard procedure to update, migrate and launch the application
bundle install
bundle exec rake db:migrate
bundle exec rails s

Isto significa que quando fizerem mudanças ao código na vossa máquina têm de sincronizar com a pasta local.

Fazer login na máquina virtual

Tive de andar à procura disto. Se quiserem fazer login na máquina virtual usem a conta vagrant e a password vagrant.

Normalmente inicio a máquina virtual através de uma shell Git e do comando vagrant up como explicado no guia de instalação, mas a partir daí uso a VirtualBox para me ligar à máquina e escrevo os comandos aí, o que funciona melhor para mim.

Fazer login no Discourse como admin

Acho que isto devia estar mais claro nos guias disponíveis. Depois de instalarem o ambiente de desenvolvimento e de terem a vossa própria instalação Discourse, o que é que querem fazer? Querem fazer login no Discourse e ver como funciona a administração!

A forma mais fácil é fazendo login como o administrador já existente eviltrout ao seguirem o seguinte URL http://localhost:4000/session/eviltrout/become.

O vosso primeiro plugin para Discourse

Sigam o Beginner’s Guide to Creating Discourse Plugins. Ficarão com uma base para desenvolver plugins.

Limpar a cache e reiniciar o servidor

Rapidamente vão perceber que têm de reiniciar o servidor e limpar a cache sempre que fizerem uma mudança no código. Juntem a isso o facto de terem que fazer a sincronização com a pasta de desenvolvimento local e isto torna-se bastante incómodo.

Podem usar o seguinte script para facilitar este processo, que faz a sincronização da pasta local, limpa a cache e reinicia o servidor de Rails.

#!/bin/bash
cd ~/vagrant
rsync -a --delete /vagrant ~
rm -rf tmp
bundle exec rails s

Para sair do servidor pressionem Ctrl + C.

Enviar os erros de Ruby para o browser

Podem reenviar os erros do Ruby para o browser.

Adicionem esta linha ao vosso controlador:

rescue_from 'StandardError' do |e| render_json_error e.message end

Para onde ir a partir daqui

Se forem iniciantes de Ruby sugiro que leiam alguns guias de iniciação (e.g. A Beginner’s Guide To Ruby). Da mesma forma, se forem novos ao Ember.js leiam alguns guias de iniciação ao Ember.js.

A partir daí recomendo que vejam alguns plugins para Discourse. Leiam o código fonte e vejam como as coisas são feitas.

Também podem dar uma olhadela aos plugins que desenvolvi:

Artigos relacionados