
Estou cansado de digitar manage.py startserver 10.211.55.4:4000
, então decidi criar um alias para isso. A única coisa é: a porta às vezes muda. Então eu fiz isso no perfil bash:
function runserver() {
python manage.py runserver 10.211.55.4:$1
}
Mas então quando eu chamo: runserver 3000
, ele inicia, mas imediatamente para de dizer:
"Erro: esse endereço IP não pode ser atribuído". No entanto, se eu digitar a mesma coisa diretamente na linha de comando, ela funcionará sem reclamações.
Responder1
Seguindo as linhas de sua tentativa original, você pode ajustar essa função para o seguinte:
function runserver() {
python manage.py runserver 10.211.55.4:$PORT
}
e então chame assim:
PORT=3000 runserver
Responder2
Na verdade, este é um erro que você recebe do Python/Django quando fornece um endereço IP ao qual ele não pode se vincular (um que não faz parte do sistema), conforme mostrado em um exemplo real recém-executado abaixo:
$ python manage.py runserver 123.123.123.123:8000
Validating models...
0 errors found
June 03, 2014 - 22:36:58
Django version 1.5.7, using settings 'tv.settings'
Development server is running at http://123.123.123.123:8000/
Quit the server with CONTROL-C.
Error: That IP address can't be assigned-to.
Então você precisa corrigir seu endereço IP (veja a saída de ifconfig --all
para ver o que está disponível) ou apenas vincular a todos eles com:
function runserver() {
python manage.py runserver 0:$1
}
O lado bash das coisas é sólido.
Responder3
Você está fazendo isso certo.
Suspeito que você esteja enfrentando um problema de rede em seus testes, e o fato de o teste com falha ter usado a função foi uma coincidência. Ao fechar uma conexão TCP, a porta permanece em uso por um pequeno período de tempo (30s), caso houvesse pacotes pendentes que ainda não foram recebidos (os pacotes podem chegar fora de ordem). Isto é oTIME_WAIT
estado. Para permitir que um novo servidor seja reiniciado imediatamente,definir a SO_REUSEADDR
bandeiracom setsockopt
(há um exemplo no Pythonsocket
documentação).
Responder4
Podemos criar um alias com comando de grupo e redirecionamento { list; }
de string aqui . <<<
O objetivo principal é redirecionar stdin
para o comando. Existem algumas maneiras apresentadas abaixo
alias runserver='{ xargs -I % python manage.py runserver 10.211.55.4:%;} <<<'
alias runserver='{ IFS= read -r port; python manage.py runserver 10.211.55.4:"$port";} <<<'
alias runserver='{ port=$(line); echo python manage.py runserver 10.211.55.4:"$port";} <<<'
Observe que o espaço depois {
e o ponto e vírgula antes }
são obrigatórios.