为开发和生产修改 manage.py
Modifying manage.py for development and production
我的项目有一个 base.py
、一个 dev.py
和一个 production.py
(不言自明)。
在我的电脑上我只保留 dev.py
和 base.py
而在服务器上我只保留 production.py
和 base.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
。任何想法为什么?或者您知道更好的方法吗?
控制它的一个好方法是在要使用 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" 应该有效。
我的项目有一个 base.py
、一个 dev.py
和一个 production.py
(不言自明)。
在我的电脑上我只保留 dev.py
和 base.py
而在服务器上我只保留 production.py
和 base.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
。任何想法为什么?或者您知道更好的方法吗?
控制它的一个好方法是在要使用 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" 应该有效。