从Django 1.9.6升级到1.11.11后Crossbar Guest Worker找不到配置模块
解决Crossbar调用django-admin时找不到DJANGO_SETTINGS_MODULE的问题
这个问题的核心在于,django-admin命令不像manage.py那样会自动加载项目的settings模块——manage.py在脚本里已经硬编码了settings的路径,而django-admin需要明确通过环境变量或者命令行参数来指定。
下面是几个可行的解决办法,按推荐程度排序:
方法1:在Crossbar配置中添加DJANGO_SETTINGS_MODULE环境变量
直接在Guest Worker的env.vars里添加这个环境变量,让Django启动时自动读取:
{ "type": "guest", "executable": "django-admin", "arguments": ["run_guest"], "options": { "workdir": "..", "env": { "vars": { "HOSTNAME": "localhost", "PORT": "8080", "DJANGO_SETTINGS_MODULE": "simpl_calc_model.settings" } } } }
这是最直接的方式,和你手动运行时通过--settings指定的效果一致,Django会自动识别这个环境变量并加载对应的配置。
方法2:在arguments中添加--settings参数
如果你更倾向于通过命令行参数传递,也可以修改arguments部分,把settings参数加进去:
{ "type": "guest", "executable": "django-admin", "arguments": ["run_guest", "--settings=simpl_calc_model.settings"], "options": { "workdir": "..", "env": { "vars": { "HOSTNAME": "localhost", "PORT": "8080" } } } }
这种方式和你手动执行./manage.py run_guest --settings=simpl_calc_model.settings的逻辑类似,直接给django-admin命令传递参数。
方法3:确保项目目录在Python路径中(可选补充)
如果上面两种方法还是有问题,可能是因为Crossbar运行时的Python路径没有包含你的项目根目录。可以在env.vars里添加PYTHONPATH,指向包含simpl_calc_model的目录(比如你的workdir是..,那PYTHONPATH可以设为..或者绝对路径):
{ "type": "guest", "executable": "django-admin", "arguments": ["run_guest"], "options": { "workdir": "..", "env": { "vars": { "HOSTNAME": "localhost", "PORT": "8080", "DJANGO_SETTINGS_MODULE": "simpl_calc_model.settings", "PYTHONPATH": ".." } } } }
这样可以确保Python能找到simpl_calc_model这个模块。
修改配置后重启Crossbar,应该就能正常加载settings模块了。
内容的提问来源于stack exchange,提问作者softweave
相关产品推荐
相关产品推荐

