
Estoy cansado de escribir manage.py startserver 10.211.55.4:4000
, así que decidí crear un alias para eso. Lo único es que el puerto cambia a veces. Entonces hice esto en el perfil de bash:
function runserver() {
python manage.py runserver 10.211.55.4:$1
}
Pero luego, cuando lo llamo:, runserver 3000
lo inicia, pero inmediatamente deja de decir:
"Error: no se puede asignar esa dirección IP". Sin embargo, si escribo lo mismo directamente en la línea de comando, funciona sin quejas.
Respuesta1
Siguiendo la línea de su intento original, puede ajustar esa función a lo siguiente:
function runserver() {
python manage.py runserver 10.211.55.4:$PORT
}
y luego llámalo así:
PORT=3000 runserver
Respuesta2
En realidad, este es un error que recibe de Python/Django cuando le proporciona una dirección IP a la que no puede vincularse (una que no es parte del sistema), como se muestra en un ejemplo real recién ejecutado a continuación:
$ 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.
Por lo tanto, necesita corregir su dirección IP (consulte el resultado de ifconfig --all
para ver qué hay disponible) o simplemente vincularlas a todas con:
function runserver() {
python manage.py runserver 0:$1
}
El lado bash de las cosas es sólido.
Respuesta3
Lo estás haciendo bien.
Sospecho que se está topando con un problema de red en sus pruebas, y el hecho de que la prueba fallida haya utilizado la función fue una coincidencia. Cuando cierras una conexión TCP, el puerto permanece en uso por un pequeño período de tiempo (30 segundos), en caso de que hubiera paquetes pendientes que aún no se hayan recibido (los paquetes pueden llegar desordenados). Este es elTIME_WAIT
estado. Para permitir que un nuevo servidor se reinicie inmediatamente,establecer la SO_REUSEADDR
banderacon setsockopt
(hay un ejemplo en Pythonsocket
documentación).
Respuesta4
Podemos crear un alias con el comando de grupo { list; }
y la redirección de cadenas aquí <<<
. El objetivo clave es redirigir stdin
al comando. Hay un par de formas que se presentan a continuación.
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";} <<<'
Tenga en cuenta que se requieren el espacio después {
y el punto y coma antes }
.