0

我一次开发多个项目。

如果我运行runserver两次,我会收到此错误:

System check identified no issues (0 silenced).
September 10, 2021 - 10:44:26
Django version 3.1.4, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Error: That port is already in use.

我知道我可以手动提供不同的端口,但更自动的方法会很好。

如果不手动给每个项目一个端口,我怎么能解决这个冲突呢?

我的笔记本电脑上有 50 多个系统,我不想手动给它们每个端口号。

4

5 回答 5

3

您可以创建自己的管理命令runsever_foo

settings.py然后您可以从或 从获取端口的默认值os.environ

于 2021-09-14T11:08:46.640 回答
1

参考这篇文章:https ://stackoverflow.com/a/38319452/16936785

我建议将服务器端口修改manage.py为以下内容以进行随机端口选择:

import random
from django.core.management.commands.runserver import Command
port_number = random.randint(8000, 8888)
Command.default_port = str(port_number)
于 2021-09-17T16:55:04.037 回答
1

把它放在你的.bashrc .zshrc.bash_profile取决于你的环境。

#!/usr/bin/env bash

function runserver()
{
    local PORTNUM=8000
    for (( ; ; )); do
        nc -z 127.0.0.1 $PORTNUM
        [ $? -ne 0 ] && break
        PORTNUM=$(( $RANDOM % 1000 + 8000 ))
    done
    python manage.py runserver $PORTNUM $@
}

然后运行runserver,它应该会启动一个测试服务器,其端口范围为[8000, 9000)

此功能用于netcat测试端口是否可用,您可能需要安装netcat.

于 2021-09-18T14:21:57.997 回答
1

您可以实现以下内容。

  1. 加入RUN_SERVER_PORT_settings.py
RUN_SERVER_PORT = 8080
  1. 在中实现以下代码manage.py
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
from django.core.management.commands.runserver import Command as runserver
from django.conf import settings


def main():
    """Run administrative tasks."""
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'accountant.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    runserver.default_port = settings.RUN_SERVER_PORT
    execute_from_command_line(sys.argv)


if __name__ == '__main__':
    main()

工作证明:

python manage.py runserver

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
September 19, 2021 - 12:47:59
Django version 3.2.6, using settings 'accountant.settings'
Starting development server at http://127.0.0.1:8080/
Quit the server with CONTROL-C.

您可以使用任何可用的端口RUN_SERVER_PORT

于 2021-09-19T12:58:43.963 回答
0

在不同的端口上运行 Django

python manage.py runserver <your IP>:<port>python manage.py runserver 0.0.0.0:5000

或者 python manage.py runserver <port>python manage.py runserver 5000

对于自动化 创建一个 bash 脚本django_5000django_7000如您根据所需端口执行不同命令的位置。

于 2021-09-10T11:02:11.050 回答