Django manage.py syncdb在CentOS上找不到我的设置文件

时间:2012-01-23 16:57:42

标签: django centos manage.py

我正在将我的django应用程序部署到 CentOS 5.5 服务器上, django-1.1.4 通过 python-2.6.5

我在myapp/settings/文件夹中有多个设置文件。

我想运行syncdb;这就是我所做的(myapp文件夹中myproject}:

$> cd /var/www/apps/myproject
$> export PYTHONPATH=/var/www/apps/myproject
$> export DJANGO_SETTINGS_MODULE=myapp.settings.my_serverconfig
$> python26 myapp/manage.py syncdb

然后Django发出如下错误:

Error: Can't find the file 'settings.py' in the directory containing 'myapp/manage.py'. It appears you've customized things.
You'll have to run django-admin.py, passing it your settings module.
(If the file settings.py does indeed exist, it's causing an ImportError somehow.)

Traceback (most recent call last):
  File "emon/manage.py", line 17, in <module>
    execute_manager(settings)
  File "/usr/lib/python2.6/site-packages/django/core/management/__init__.py", line 360, in execute_manager
    setup_environ(settings_mod)
File "/usr/lib/python2.6/site-packages/django/core/management/__init__.py", line 343, in setup_environ
    project_module = import_module(project_name)
File "/usr/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
ImportError: No module named my_serverconfig

myapp.wsgi文件中,os.path附加了myproject路径,同时也设置了os.environ['DJANGO_SETTINGS_MODULE']。 Apache(通过mod_wsgi)可以启动应用程序,没有这样的错误。

最后,这适用于Windows,我使用 django-1.1.1 运行 python-2.6.6

$> d:
$> cd d:\Code\myproject
$> export PYTHONPATH=d:\Code\myproject
$> export DJANGO_SETTINGS_MODULE=myapp.settings.dev_settings
$> python.exe myapp/manage.py syncdb

我知道版本不一样,但我不确定微小的差异可能会导致我的所有祸患。此外,我似乎没有为Windows找到完全相同的python版本。

有什么想法?非常感谢阅读。

0

编辑 添加了manage.py内容

#!/usr/bin/env python
from django.core.management import execute_manager
import os


    if __name__ == "__main__":
    settings = None
    try:
        if os.environ.has_key('LOCAL_SERVER_SETTINGS'):
            os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings.%s' % os.environ['LOCAL_SERVER_SETTINGS']

        if os.environ.has_key('DJANGO_SETTINGS_MODULE'):
            settings = __import__(os.environ['DJANGO_SETTINGS_MODULE'])

        if settings is None:
            import settings
        execute_manager(settings)

    except ImportError:
        import sys
        sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)

        import traceback
        traceback.print_exc()

        sys.exit(1)

编辑:更多关于myapp包中发生的事情

我在myapp.__init__模块中修补了一些django函数/类。我在想这个模块中的import django部分引起了循环引用。当我加载myapp.settings。[any_config]并且可能导致崩溃时执行代码。但是,为什么WSGI没有错误加载正确的设置模块,它在Windows上也可以正常工作?更多:在注释掉所述代码部分之后,ImportError仍然存在。

1 个答案:

答案 0 :(得分:0)

如果您移动设置文件,则需要修改manage.py以告知其在何处找到它。默认情况下,它与manage.py位于同一目录中,但如果您移动到另一个python模块(包含__init__.py的文件夹),则需要更新manage.py中的引用。< / p>

在manage.py中查找导入设置模块的位置,然后在您的案例中导入settings.dev_settings。寻找两条重要的路线

imp.find_module('settings') # Assumed to be in the same directory.
...
import settings

将这些更改为您将设置文件移动到的位置(假设您已移至settings.dev_settings):

imp.find_module('settings.dev_settings') # Assumed to be in the same directory.
...
from settings import dev_settings as settings

您还可以使用命令行选项--settings指定要使用的设置文件。