尝试用uwsgi代理mezzanine站点时Server internal error,查看服务器命令行发现Import Error,比如:
ImportError: No module named mezzsite.settings
ImportError: No module named mezzsite.urls
这是因为,在创建mezzanine项目时,会有一个问题,比如我们创建一个mezzanine项目用于测试:
(mezzanine) [root@192 mezzanine]# mezzanine-project testmezz
创建项目后,会生成一个目录叫testmezz
(mezzanine) [root@192 mezzanine]# ll
total 12
drwxrwxrwx. 2 root root 4096 Dec 6 23:36 bin
drwxrwxrwx. 2 root root 23 Nov 29 23:29 include
drwxrwxrwx. 3 root root 23 Nov 29 23:29 lib
lrwxrwxrwx. 1 root root 3 Nov 29 23:29 lib64 -> lib
drwxrwxrwx. 9 root root 4096 Dec 7 00:07 mezzsite
-rwxrwxrwx. 1 root root 60 Dec 6 23:36 pip-selfcheck.json
drwxr-xr-x 4 root root 149 Dec 7 00:00 testmezz
进入这个testmezz目录,会发现里面还有一个同名的目录,也叫testmezz
(mezzanine) [root@192 mezzanine]# cd testmezz/
(mezzanine) [root@192 testmezz]# ll
total 32
drwxr-xr-x 2 root root 156 Dec 7 00:00 deploy
-rwxrwxrwx 1 root root 21951 Dec 7 00:00 fabfile.py
-rwxrwxrwx 1 root root 0 Dec 7 00:00 __init__.py
-rwxrwxrwx 1 root root 372 Dec 7 00:00 manage.py
-rwxrwxrwx 1 root root 17 Dec 7 00:00 requirements.txt
drwxr-xr-x 2 root root 99 Dec 7 00:00 testmezz
再进入这个testmezz目录,会发现里面有一些文件:
(mezzanine) [root@192 testmezz]# cd testmezz/
(mezzanine) [root@192 testmezz]# ll
total 28
-rwxrwxrwx 1 root root 0 Dec 7 00:00 __init__.py
-rwxrwxrwx 1 root root 1609 Dec 7 00:00 local_settings.py
-rwxrwxrwx 1 root root 11641 Dec 7 00:00 settings.py
-rwxrwxrwx 1 root root 4272 Dec 7 00:00 urls.py
-rwxrwxrwx 1 root root 493 Dec 7 00:00 wsgi.py
问题就在于这两个同名的文件夹,当程序调用里面的testmezz目录下的这几个py模块时,程序只知道是testmezz.xxx.py,会认为这个testmezz是外层的那个testmezz目录,当在外层目录下找不到这些py模块时就会出现ImportError,解决办法就是把内层目录下的这些文件(除了__init__.py之外,因为外层目录下已经存在)全部复制到外城的testmezz目录下即可。