2017-07-19 22 views
1

我的项目有base.pydev.pyproduction.py(非常自我解释)。修改用于开发和生产的manage.py

在我的电脑上,我只保留dev.pybase.py,而在服务器上我只保留production.pybase.py

虽然WSGI不是问题,但我发现每次部署后都必须进入manage.py以更改os.environ.setdefault()设置。

我想改变这一点:

from __future__ import absolute_import, unicode_literals 

import os 
import sys 

if __name__ == "__main__": 
    try: 
     os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.dev") #or project.settings.production 

    from django.core.management import execute_from_command_line 

    execute_from_command_line(sys.argv) 

这样:

from __future__ import absolute_import, unicode_literals 

import os 
import sys 

if __name__ == "__main__": 
    try: 
     os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.dev") 
    except: 
     os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.production") 

    from django.core.management import execute_from_command_line 

    execute_from_command_line(sys.argv) 

然而,这仍然引发了一个ImportError。任何想法为什么?或者你知道更好的方法吗?

回答

1

控制此问题的好方法是在要使用manage.py的shell中使用DJANGO_SETTINGS_MODULE环境变量。 默认manage.py不应该改变:

#!/usr/bin/env python 
import os 
import sys 

if __name__ == "__main__": 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings") 

    from django.core.management import execute_from_command_line 

    execute_from_command_line(sys.argv) 

对于ImportError, 我不知道我们有足够的信息来进行调试。 但基本上,您需要确保文件可从当前工作目录 或PYTHONPATH上的目录中获得。 例如,如果从项目的根目录运行manage.py,则存在 和project/settings/dev.py,则应该使用值“project.settings.dev”。