通过uwsgi设置DJANGO_SETTINGS_MODULE

时间:2015-08-03 15:15:30

标签: django uwsgi

我正在尝试找到分割我的django设置的最佳方法,并为dev和prod提供不同的设置文件。

我的wsgi文件:

   $subject2 = '1904-1905-france-germany-spain';

   $new = explode('-', $subject2);

if(count($new) == 2){ 

   echo $name = $new[0] . '/' . substr($new[1], 2);

} elseif (count($new) > 2) {

    $name = $new[0] . '/' . substr($new[1], 2);

        for($i = 2; $i<count($new); $i++ ){
            $name.= ' ' . ucfirst($new[$i]) . ' ';
         }
    $name = trim($name, ' ');
    echo $name;
}

在我的uwsgi.ini文件中我有这个:

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

但uwsgi.ini文件中的env未传递给wsgi。如果我在wsgi文件中打印os.environ,则不会设置DJANGO_SETTINGS_MODULE。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

我喜欢在wsgi.py中做这样的事情:

import os
import socket

socket_name = socket.gethostname()
if "stage" in socket_name:
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.staging')
elif "prod" in socket_name:
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.production')
else:
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.local')

application = get_wsgi_application()

您检测是否进行升级,刺激或本地化的方法可以是您想要的任何方式,但是os.environ.setdefault命令似乎可以实现您的目标。 ;希望能做到。

答案 1 :(得分:1)

我的解决方案是在bin / activate文件中设置DJANGO_SETTINGS_MODULE。我在导出PATH之后添加了它,如:

export PATH
export DJANGO_SETTINGS_MODULE='project.settings.local'

您应该在项目环境文件夹中找到bin文件夹。