在生产服务器上找不到 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.pyandbase.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的主要内容,如果未能解决你的问题,请参考以下文章

rbenv:bundle:在生产服务器上找不到命令

Django 表单在生产与 LH 上找不到正确的 ID int 增量

sqlserver复制延迟报”应用复制的命令时在订阅服务器上找不到该行“

在计算机“。”上找不到服务 ServiceName

在此服务器上找不到请求的 URL。

在服务器上找不到 CSS 样式表?