在生产服务器上找不到 Dajaxice
Posted
技术标签:
【中文标题】在生产服务器上找不到 Dajaxice【英文标题】:Dajaxice not found on production server 【发布时间】:2013-01-02 08:32:06 【问题描述】:我有一个 Django 1.4 项目,在 Python 2.7 上运行,我使用的是 Dajaxice 0.5.4.1。我已经在我的开发机器(Windows 7)上进行了设置,一切正常。但是,当我将应用程序部署到生产服务器(Ubuntu 12.04)时,dajaxice.core.js
文件出现 404 错误,无论如何都无法解决此问题。生产服务器使用完全相同的所有软件版本。
我的项目结构如下:
/myproject
/myproject/myproject-static/ <-- all the static files are here
/myproject/myproject-static/css/
/myproject/myproject-static/img/
/myproject/myproject-static/js/
/myproject/templates/
/myproject/myproject/
/myproject/main/
/myproject/app1/
/myproject/app2/
/myproject/app3/
etc.
我按照 Dajaxice 安装步骤 here 并将所有内容放在原位(在 settings.py
、˙urls.pyand
base.html` 文件中)。
我的settings.py
文件也有这些值:
from unipath import Path
PROJECT_ROOT = Path(__file__).ancestor(3)
STATIC_ROOT = ''
STATIC_URL = '/myproject-static/'
STATICFILES_DIRS = (
PROJECT_ROOT.child('myproject-static'),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'dajaxice.finders.DajaxiceFinder',
)
DAJAXICE_MEDIA_PREFIX = "dajaxice"
DAJAXICE_DEBUG = True
我的django.conf
文件中有一个Alias
指令,如下所示:
Alias /myproject-static/ "/path/to/myproject/myproject-static/"
我在生产服务器上执行了collectstatic
,并将所有静态文件收集在项目根目录的几个文件夹中。所以,现在当我查看我部署的网站时,我可以看到 CSS 已正确应用,javascript 工作正常,并且网站周围的导航按预期工作。一切都很好,除了 Ajax 完全坏了,因为 dajaxice.core.js
从未被包含在内。
我收集静态后的项目文件夹结构如下:
/myproject
/myproject/myproject-static/ <-- all the static files are originally here
/myproject/myproject-static/css/
/myproject/myproject-static/img/
/myproject/myproject-static/js/
/myproject/templates/
/myproject/admin/ <-- folder created with 'collectstatic' command
/myproject/css/ <-- folder created with 'collectstatic' command
/myproject/dajaxice/ <-- dajaxice.core.js is located here
/myproject/django_extensions/ <-- folder created with 'collectstatic' command
/myproject/img/ <-- folder created with 'collectstatic' command
/myproject/js/ <-- folder created with 'collectstatic' command
/myproject/myproject/
/myproject/main/
/myproject/app1/
/myproject/app2/
/myproject/app3/
etc.
我在这里的静态文件做错了什么吗? 我还应该尝试什么来解决这个简单的错误?
【问题讨论】:
你好,我也遇到了类似的问题,请问你最后解决了吗? 【参考方案1】:您是否检查过其他资产,dajaxice.core.js
是否在您的static/dajaxice
文件夹中?如果不是,则问题可能与STATICFILES_FINDERS
的未配置有关,请检查Installing dajaxice again
collectstatic 和 dajaxice 的另一个常见问题是使用 --link
运行第一个您是否使用此选项?
希望对你有帮助
【讨论】:
嗨豪尔赫,谢谢你的回答!我稍微改变了我的文件夹结构并相应地编辑了我的原始帖子。我在收集静态文件时没有使用--link
选项。另外,dajaxice.core.js
是在收集后位于我项目的根目录中的文件夹dajaxice
˙ 中。我试图在我原来的帖子中多解释一下。
我可能忘了提到我确实检查了提供的安装 dajaxice 的链接,我很确定一切都在它的位置。正如我已经提到的,一切都可以在开发服务器(Windows 7)上运行,但是当我将它部署到生产服务器上时它会失败......【参考方案2】:
我花了几个小时来解决这个问题。这很疯狂,因为在我的开发环境中一切正常,但在测试服务器上却没有,即使所有 dajax 和 dajaxice 设置都在一个通用的基本设置文件上。我从来没有使用标准路线让它工作。但这是一个非常简单的解决方法:
1) 将 dajaxice.core.js 下载到任何你喜欢的静态目录中。您可以在项目根目录的 dajaxice 目录中找到 js:
项目/dajaxice/dajaxice.core.js
在我的例子中,我将文件放在我所有其他 js 库旁边的 static/js 中。
2) 在您的网页上,替换为:
% dajaxice_js_import %
带有到 js 库的正常日常链接。就我而言:
<script src="/static/js/dajaxice.core.js" type="text/javascript"></script>
很遗憾,此补丁仅适用于已开发的代码。如果您在开发环境中使用它,新的 dajaxice 代码将注册在原始项目/dajaxice/ 位置,因此在开发任何新代码后必须将文件复制到静态。
【讨论】:
以上是关于在生产服务器上找不到 Dajaxice的主要内容,如果未能解决你的问题,请参考以下文章
Django 表单在生产与 LH 上找不到正确的 ID int 增量