Я устал печатать manage.py startserver 10.211.55.4:4000, поэтому решил сделать псевдоним для этого. Единственное: порт когда-то меняется. Поэтому я сделал это в bash-профиле:
function runserver() {
python manage.py runserver 10.211.55.4:$1
}
Но тогда, когда я его назову: runserver 3000, он запускает его, но сразу же перестает говорить:
«Ошибка: этот IP-адрес адрес не может быть назначен - ". Однако, если я нахожу то же самое прямо в командной строке, он работает без жалоб.
На самом деле это ошибка, которую вы возвращаете из 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, чтобы узнать, что доступно), либо просто привязаны ко всем из них:
Бах-сторона вещей звучит.
Вы делаете это правильно.
Я подозреваю, что вы столкнулись с сетевой проблемой в своем тестировании, и тот факт, что неудачный тест использовал эту функцию, был совпадением. Когда вы закрываете TCP-соединение, порт остается в использовании в течение небольшого промежутка времени (30 секунд), если ожидающие пакеты еще не получены (пакеты могут выйти из строя). Это состояние TIME_WAIT. Чтобы перезапустить новый сервер, установите флаг SO_REUSEADDR с помощью setsockopt (в документации Python socket есть пример).
Мы можем сделать псевдоним с перенаправлением группы { list; } и здесь-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";} <<<'
Обратите внимание на пробел после { и точку с запятой до }.