Um erro 503 numa aplicação criada em «Setup Node.js App» quer quase sempre dizer a mesma coisa: o servidor tentou arrancar a aplicação e ela não arrancou, ou arrancou e caiu logo. Quem as liga ao servidor é o Passenger, e o que a aplicação escreve ao falhar fica no registo dele. Quase tudo se descobre lendo esse registo e correndo a aplicação à mão uma vez. Este artigo vai por ordem de probabilidade.
Descobrir a causa, passo a passo
| 1 |
Abra o ecrã da aplicação em «Setup Node.js App» e confira três campos: a raiz da aplicação, o endereço e o ficheiro de arranque. Estão certos? O ficheiro existe mesmo na raiz, com esse nome exacto (maiúsculas e minúsculas contam)?
|
|
| 2 |
Leia o registo. O ecrã tem um campo de Passenger log file. Se estiver vazio, indique um ficheiro dentro da pasta da aplicação, guarde, reinicie, repita o pedido que falha, e abra o ficheiro. A última mensagem costuma ser a causa.
|
|
| 3 |
Corra a aplicação à mão. Se a conta tem terminal, entre no ambiente virtual com o comando que o ecrã da aplicação mostra no topo e corra o ficheiro de arranque (node app.js). Um erro de sintaxe, um módulo em falta ou uma variável por definir aparecem logo no ecrã. Pare com Ctrl+C.
|
|
| 4 |
Corrija, instale e reinicie. Depois de corrigir, use «Run NPM Install» se as dependências mudaram e o botão de reinício para o Passenger carregar tudo outra vez.
|
|
As causas, por ordem
| Causa |
O que o registo costuma dizer |
O que fazer |
| Ficheiro de arranque errado |
Não encontra o ficheiro, ou o caminho não existe. |
Corrija o campo no ecrã da aplicação. É relativo à raiz da aplicação. |
| Dependências por instalar |
«Cannot find module» seguido do nome. |
«Run NPM Install». Não envie a pasta node_modules por FTP. |
| Versão do Node.js não serve ao código |
Um «SyntaxError» ou «Unexpected token» numa linha que parece correcta. |
Escolha uma versão mais recente, ou a que o projecto pede, e reinstale as dependências. |
| Variável ou ligação em falta |
Erro de ligação à base de dados, ou «undefined» onde devia estar um valor. |
Defina as variáveis no ecrã da aplicação e reinicie. Veja variáveis de ambiente e segredos. |
| A aplicação não fica a correr |
Arranca e termina logo, sem erro. |
O processo tem de iniciar um servidor HTTP e ficar ligado. Um script que só corre uma tarefa e acaba não serve. |
| Alterações não aplicadas |
O erro é o de antes de corrigir. |
Reinicie a aplicação. |
| Limites da conta |
Falta de memória ou de processos; ou o erro é 508 em vez de 503. |
Veja erros 500, 403, 404 e 508. |
.htaccess mexido |
O Passenger deixa de ser chamado para esse endereço. |
O ficheiro tem um bloco marcado pelo CloudLinux Passenger, criado pela ferramenta. Não o apague nem edite. Se o site de WordPress está na raiz do mesmo domínio, as regras de um podem apanhar o outro. |
Para separar «o servidor» de «o meu código», ponha uma aplicação mínima no lugar da sua, e veja se responde:const http = require("http");
http.createServer((req, res) => {
res.end("ok");
}).listen(process.env.PORT || 3000);Se esta responde e a sua não, o problema está no código ou nas dependências. Se nem esta responde, junte ao pedido de suporte o registo do Passenger.
|
Não tente usar as portas 80 ou 443, nem dependa de um número de porta fixo para o visitante chegar à aplicação. É o Passenger que liga o endereço do site ao processo. Abrir portas por conta própria só traz conflitos.
|
|
O erro 503 também tem outras fontes, que nada têm a ver com Node.js: manutenção, sobrecarga ou serviços parados. Erro 503 e o resto da família 5xx ajuda a distinguir. E se precisa de um processo sempre ligado, uma fila ou um robô, um VPS é o sítio certo: o PM2 num VPS.
|
|
Já leu o registo e continua sem perceber? Envie-nos o domínio, a hora do erro e a última mensagem do registo, e vemos o que o servidor faz.
Abrir um pedido de suporte
|
PRODUTO RECOMENDADO Alojamento de sites com cPanel Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 396,00 MT/mês (plano de 3 anos, com cupão) Ver planos |