
Мне надоело печатать manage.py startserver 10.211.55.4:4000
, поэтому я решил сделать для этого псевдоним. Единственное: порт иногда меняется. Поэтому я сделал это в профиле bash:
function runserver() {
python manage.py runserver 10.211.55.4:$1
}
Но когда я его называю: runserver 3000
, он запускается, но тут же останавливается и говорит:
"Ошибка: этот IP-адрес не может быть назначен". Однако если я ввожу то же самое прямо в командную строку, все работает без нареканий.
решение1
Продолжая вашу первоначальную попытку, вы можете изменить эту функцию следующим образом:
function runserver() {
python manage.py runserver 10.211.55.4:$PORT
}
и затем назовите его так:
PORT=3000 runserver
решение2
На самом деле это ошибка, которую вы получаете от Python/Django, когда вы передаете ему IP-адрес, к которому он не может привязаться (тот, который не является частью системы), как показано в реальном, только что запущенном примере ниже:
$ 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.
Поэтому вам нужно либо исправить свой IP-адрес (посмотрите на вывод, ifconfig --all
чтобы увидеть, что доступно), либо просто привязаться ко всем из них с помощью:
function runserver() {
python manage.py runserver 0:$1
}
Bash-сторона — это звук.
решение3
Ты делаешь это правильно.
Я подозреваю, что вы столкнулись с сетевой проблемой в вашем тестировании, и тот факт, что неудавшийся тест использовал эту функцию, был совпадением. Когда вы закрываете TCP-соединение, порт остается в использовании в течение небольшого промежутка времени (30 с), на случай, если были ожидающие пакеты, которые еще не были получены (пакеты могут приходить не по порядку). ЭтоTIME_WAIT
состояние. Чтобы разрешить новому серверу перезапуститься немедленно,установить SO_REUSEADDR
флагс setsockopt
(есть пример в Pythonsocket
документация).
решение4
Мы можем создать псевдоним с помощью групповой команды { list; }
и перенаправления here-string <<<
. Основная цель — перенаправить stdin
на команду. Ниже представлено несколько способов
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";} <<<'
Обратите внимание, что пробел после {
и точка с запятой перед }
ним обязательны.