我的django,uwsgi项目由于虚拟环境而无法运行

时间:2019-06-04 12:06:00

标签: python django ubuntu uwsgi

我将在Ubuntu Server上使用uwsgi为django项目提供服务,但该项目无法运行。

我正在使用python 3.6,但uwsgi向我显示它是2.7

我将默认python更改为python3.6,但uwsgi仍然无法正常工作。

这是我的命令:

uwsgi --http :8001 --home /home/ubuntu/repository/env --chdir 
/home/ubuntu/repository/project -w project.wsgi

这是错误消息:

*** Starting uWSGI 2.0.18 (64bit) on [Tue Jun  4 21:03:58 2019] ***
compiled with version: 5.4.0 20160609 on 04 June 2019 11:39:14
os: Linux-4.4.0-1079-aws #89-Ubuntu SMP Tue Mar 26 15:25:52 UTC 2019
nodename: ip-172-31-18-239
machine: x86_64
clock source: unix
detected number of CPU cores: 2
current working directory: /home/ubuntu/repository/charteredbus
*** running under screen session 1636.sbus ***
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
chdir() to /home/ubuntu/repository/charteredbus
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 15738
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uWSGI http bound on :8001 fd 4
spawned uWSGI http 1 (pid: 8402)
uwsgi socket 0 bound to TCP address 127.0.0.1:39614 (port auto-assigned) fd 3
Python version: 2.7.12 (default, Nov 12 2018, 14:36:49)  [GCC 5.4.0 20160609]
Set PythonHome to /home/ubuntu/repository/env
ImportError: No module named site

3 个答案:

答案 0 :(得分:0)

日志表明没有名为site的模块

  

ImportError:没有名为站点的模块

我认为网站是Django应用。 您是否在INSTALLED_APPS(settings.py)中注册了这个

否则,您可能需要注册您的应用程序。 (网站应用中的apps.py)

请帮助我。

碧玉

答案 1 :(得分:0)

不幸的是,必须使用与您的virtualenv匹配的python版本来编译uWSGI。这意味着:如果uWSGI是使用python 2.7编译的,则不能在virtualenv(以及Django应用)中使用python 3.6。

幸运的是,有一些方法可以解决此问题:

  • 在您的virtualenv中安装uWSGI并使用该uWSGI二进制文件运行Django。
  • 使用Python作为uWSGI的插件。

第一个非常简单。您需要做的就是在启动脚本中更改uWSGI二进制文件的路径,以指向安装在virtualenv中的uWSGI。 (如果您要使用systemd启动uWSGI,我建议使用systemd用户单元。只是不要忘记运行loginctl enable-linger

第二个并不那么复杂。首先,您必须安装没有python插件的uWSGI,然后为所需的所有python版本安装单独的插件。除此之外,您还可以找到here。如果您正在使用uWSGI,则系统软件包存储库中可能已有准备好的插件。

答案 2 :(得分:0)

对于那些不能(或未能)按照@GwynBleidD 提到的第二个选项构建与语言无关的 uwsgi 二进制文件的人,您还可以构建一个单独的独立 uwsgi 二进制文件,绑定到不同的 python 插件,通过:

  • 保留之前构建的 uwsgi 二进制文件

  • 通过在 Header always set Strict-Transport-Security "max-age=63072000;" Header set X-Content-Type-Options "nosniff" #Restrict iframe to example.com and same-origin only Header always append X-Frame-Options ALLOW-FROM=https://example.com Header always append X-Frame-Options "SAMEORIGIN" Header set Cache-Control "no-cache, no-store, no-transform" Header set Pragma "no-cache" Header set X-XSS-Protection "1; mode=block" Header set Referrer-Policy: "strict-origin-when-cross-origin" Header set Feature-Policy: "fullscreen 'self'" Header set x-permitted-cross-domain-policies "none" 中运行 make clean 来清理以前的构建

  • 例如在/PATH/TO/UWSGI_SOURCE_FOLDER中运行命令YOUR_PYTHON_VERSION uwsgiconfig.py --build

/PATH/TO/UWSGI_SOURCE_FOLDER