django 生产服务器 : root path

标签 django path root production

我正在开发一个 Django 应用程序。在开发服务器上,一切正常。 在生产服务器上(使用 apache),没有任何工作。

1/我有错误 TemplateDoesNotExist at/

在我的 settings.py 文件中:

SITE_ROOT = os.path.abspath(os.path.dirname(__name__))。这是项目根路径。

templateDir = os.path.join(SITE_ROOT, 'templates/')
TEMPLATE_DIRS = (
    templateDir
)

这是模板路径。

2/如果我将 SITE_ROOT 更改为项目的绝对路径:

SITE_ROOT="/var/www/europolix"

模板似乎可以识别,但我还有另一个错误: 没有名为 getEurlexIdsFunctions 的模块 这是代码:

import sys
sys.path.append('import')
import getEurlexIdsFunctions as eurlexIds 

我认为问题再次来自相对路径。 Apache 似乎在“var/www/”而不是“var/www/europolix/”中搜索“导入”。我说得对吗?

这是我的 apache 配置:

WSGIScriptAlias /europolix /var/www/europolix/europolix/wsgi.py
WSGIPythonPath /var/www/europolix/
<Directory /var/www/europolix/>
   <Files wsgi.py>
       Order deny,allow
       Allow from all
   </Files>
</Directory>

是根路径无法识别的问题,还是其他问题?

非常感谢。

最佳答案

好吧,有几件事。使用 settings.py 时,最好将所有路径声明为绝对路径。我在你的代码中看到你有这一行

SITE_ROOT = os.path.abspath(os.path.dirname(__name__))

用于站点的根目录,但我认为如果使用 __file__ 全局变量而不是 __name__ 会更好。像这样:

SITE_ROOT = os.path.abspath(os.path.dirname(__file__))

我在生产服务器中有一个 Django 应用程序,我必须添加到我的 httpd.conf 关于 wsgi 的是 load_module 指令和虚拟主机中的这一行

WSGIScriptAlias / C:/Users/ike/Documents/Work/Sincronoz/code/apache/django.wsgi

django.wsgi 脚本的别名指定为根。

然后在 django.wsgi 脚本中我有这段代码:

import os, sys
sys.path.append(r'<full site root to where is settings.py>')
os.environ['DJANGO_SETTINGS_MODULE'] = 'my_project_module.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

我认为你最好使用绝对路径,当你完成所有工作后,如果需要的话,尝试使用相对路径来满足你的需要。

希望对您有所帮助。

关于django 生产服务器 : root path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16415055/

相关文章:

python - 调用 Python C 扩展会阻止所有 Django 进程/用户

objective-c - NSTask、命令行工具和 root

android - FileExplorer eclipse 作为 root

java servlet 编译错误

python - 在 Python 中查找系统文件夹位置

objective-c - iOS Objective-C 图像文件名/路径在模拟器和设备之间的不同行为

android - 以编程方式强制关闭应用程序

python - Django collectstatic 命令在 AWS Elastic Beanstalk Amazon Linux 2 Python 3 平台中失败

django - 将 Django 的默认小部件更改为自定义小部件

python - Django/WSGI 应用程序中的持久数据库连接