【问题标题】:uwsgi ImportError: No module named osuwsgi ImportError:没有名为 os 的模块
【发布时间】:2014-09-18 09:09:19
【问题描述】:

我正在自学如何设置 Ubuntu 服务器来运行我的 Django 应用程序。我想使用 Nginx + uwsgi。我知道这个问题对于专家来说可能很容易,但我花了 6 天时间在互联网上寻找它而没有得到它(无论如何,如果有答案的链接,请原谅我)。我关注了很多教程和帖子,但没有找到解决方案。

我在下面描述我的文件结构:

我的 django 项目位于 /usr/local/projects/myproject

我的 virtualenv 在 /root/.virtualenvs/myproject

我的 uwsgi 配置文件 myproject.ini 位于 /etc/uwsgi/apps-available/ 并正确符号链接在 /etc/uwsgi/apps-enabled/ 中

[uwsgi]

plugins = python 
socket  = /tmp/myproject.sock
chmod-socket = 644
uid     = www-data
gid     = www-data
master  = true
enable-threads = true
processes = 2
no-site=true 

virtualenv = /root/.virtualenvs/myproject
chdir   = /usr/local/projects/myproject
module  = myproject.wsgi:application
pidfile = /usr/local/projects/myproject/myproject.pid
logto   = /var/log/uwsgi/myproject_uwsgi.log  
vacuum  = true

我的 nginx 配置文件 myproject.conf 在 /etc/nginx/sites-available/ 中,并且在 /etc/nginx/sites-enabled/ 中正确符号链接

# the upstream component nginx needs to connect to
upstream django {
    server unix:///tmp/myproject.sock; # for a file socket
}

server {
    listen  80;
    server_name dev.myproject.com www.dev.myproject.com;
    access_log /var/log/nginx/myproject_access.log;
    error_log /var/log/nginx/myproject_error.log;

    location / { 
        uwsgi_pass  unix:///tmp/myproject.sock;
        include     /etc/nginx/uwsgi_params;
        uwsgi_param UWSGI_SCRIPT myproject.wsgi;
    }

    location /media/  {
        alias /usr/local/projects/myproject/media/;
    }

    location  /static/ {
        alias  /usr/local/projects/myproject/static/;
    }
}

当我尝试访问 dev.myproject.com 时,出现内部服务器错误。然后我看看我的 uwsgi 日志:

Traceback (most recent call last):
  File "./myproject/wsgi.py", line 9, in <module>
    import os
ImportError: No module named os
Sat Jul 26 17:39:16 2014 - unable to load app 0 (mountpoint='') (callable not found or import error)
Sat Jul 26 17:39:16 2014 - --- no python application found, check your startup logs for errors ---
[pid: 8559|app: -1|req: -1/8] 79.148.138.10 () {40 vars in 685 bytes} [Sat Jul 26 17:39:16 2014] GET / => generated 21 bytes in 0 msecs (HTTP/1.1 500) 1 headers in 57 bytes (0 switches on core 0)

我需要您的帮助,因为尽管可能非常简单,但我无法找到解决方案。

如果您需要了解其他信息,请告诉我,我会尽快更新我的问题。

【问题讨论】:

  • 你有没有使用virtaulenv创建虚拟环境/usr/local/projects/myproject?我看到你在 /root 中有一些东西——我的建议是你不要使用 /root 进行开发,因为进程无法访问内容,除非它们以 root 身份运行。通常你会想在你的服务器上为一个开发项目创建一个用户,并将你的源文件放在里面,比如 /home/myproject/... 等。

标签: django nginx uwsgi ubuntu-server


【解决方案1】:

我终于找到了解决办法。

我按照 kchan 的建议不要将任何内容放在 /root/ 目录中。基本上,我在 myproject.conf 文件和 myproject.ini 文件中做了一些小改动。我创建了一个用户并构建了如下所示的所有内容:

/etc/uwsgi/apps-available/ 中的 uwsgi 配置文件 myproject.ini 并在 /etc/uwsgi/apps-enabled/ 中正确符号链接

[uwsgi]

plugins = python 
socket  = /tmp/myproject.sock
chmod-socket = 644
uid     = www-data
gid     = www-data
master  = true
enable-threads = true
processes = 2

virtualenv = /home/user/.virtualenvs/myproject
chdir      = /home/user/projects/myproject
module     = myproject.wsgi:application
pidfile    = /home/user/projects/myproject/myproject.pid
daemonize  = /var/log/uwsgi/myproject_uwsgi.log  
vacuum     = true

/etc/nginx/sites-available/ 中的 nginx 配置文件 myproject.conf 并在 /etc/nginx/sites-enabled/ 中正确符号链接

# the upstream component nginx needs to connect to
upstream django {
    server unix:///tmp/myproject.sock; # for a file socket
}

server {
    listen  80;
    server_name dev.myproject.com www.dev.myproject.com;
    access_log /var/log/nginx/myproject_access.log;
    error_log /var/log/nginx/myproject_error.log;

    location / { 
        uwsgi_pass  django;
        include     /etc/nginx/uwsgi_params;
    }

    location /media/  {
        alias /home/user/projects/myproject/media/;
    }

    location  /static/ {
        alias  /home/user/projects/myproject/static/;
    }
}

我必须说,我认为真正的问题是尝试在我的 virtualenv 的 postactivate 文件中设置我的数据库配置。希望能帮助到别人。

【讨论】:

    猜你喜欢
    • 2014-11-03
    • 2018-09-09
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2015-01-15
    相关资源
    最近更新 更多