【问题标题】:Django dev server intermittently fails to serve static filesDjango 开发服务器间歇性地无法提供静态文件
【发布时间】:2011-12-04 19:26:09
【问题描述】:

在我的开发环境中,我在提供静态文件(js 脚本和 css)时遇到间歇性故障。在 Chrome 的错误控制台中,我得到 404。但是,如果我刷新这些项目,或直接访问 URL,它们就可以正常使用。

这很烦人。

例子:

GET http://127.0.0.1:8000/static/js/editor/xyz.js?v=1 404 (NOT FOUND)

但是如果我直接访问那个 URL 就好了。如果我刷新页面几次,它会再次工作。

有什么想法吗?

Chrome 14.0.835.202

Django==1.3
Fabric==1.0.1
Jinja2==2.5.5
PIL==1.1.7
Pygments==1.3.1
South==0.7.3
Sphinx==1.0.5
boto==2.0
chunks==0.1
django-devserver==0.2.1
django-pagination==1.0.7
django-sorting==0.1
django-storages==1.1.3
docutils==0.8
gunicorn==0.12.1
ipython==0.10.1
paramiko==1.7.6
pep8==0.6.1
psycopg2==2.2.2
pycrypto==2.0.1
python-dateutil==1.5
python-memcached==1.45
wsgiref==0.1.2

【问题讨论】:

  • 我也有同样的问题。你找到原因了吗?
  • 还没有!使用 --forked 运行似乎可行,但无法使用 pdb
  • 为什么你的网址有“?v=1”?
  • 这只是一个面向未来的缓存破坏功能。开发服务器不使用它,只是为了我们可以更改下一个版本的 URL。
  • 请发布您的 settings.py

标签: django django-dev-server


【解决方案1】:

开发服务器是单线程的,所以如果有东西一直在等待,它会阻塞每个请求。

我通常使用django concurent dev server,它是多线程的并且工作得更好。它也非常快速且易于设置;)

【讨论】:

  • 这对我来说已经停止发生了,这令人沮丧。我还没有在项目上更新 Django...奇怪。
  • @Thomas:也许 chrome 有什么特别之处?可能应该用其他浏览器确认。
  • @Joe:你的 django runserver 控制台日志中有 404 吗?您也可以提高调试级别,然后检查是否再次出现问题。
【解决方案2】:

这可能取决于您的设置。 你为静电做了什么?有什么设置?你做了收集静态的吗? 试试this以防万一

然而,关于在开发中提供静态文件:

警告这仅在 DEBUG 为 True 时有效。

这是因为这种观点效率极低,而且可能不安全。 这仅用于本地开发,切勿使用 正在生产中。

来自here

您不能只在另一台服务器中提供静态文件吗?

【讨论】:

  • 对不起,这是很久以前的事了,我不记得了。我认为它不再发生,所以我不再担心它。
  • 从开发服务器提供静态文件是正常的。这是典型的发展。我没有说这发生在生产中。
【解决方案3】:

阅读所有答案后,如果仍然有人遇到此问题,那么... 根据 Django 的性质,您不需要做任何事情来提供静态文件 只是你的设置文件应该有如下正确的配置:

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    # **THIS IS USED WHEN YOUR STATIC FILES ARE IN SOME OTHER FOLDER ALSO**

    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.

    # Don't forget to use absolute paths, not relative paths.

    FOLDER_NAME, 
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

INSTALLED_APPS = (
    # other apps
    'django.contrib.staticfiles',
)

但如果您仍然遇到问题,请将其放入您的 urls.py:

(r'^(文件路径)$', 'django.views.static.serve' , {'document_root': 'PROJECT_ROOT_DIR' + "静态文件夹路径"}),强>

以上 URL 将用于静态文件,无论它们是 JS 文件还是 CSS 或图像。

如果是生产服务器,则不需要这个。

然后运行:python manage.py collecstatic。

希望这会有所帮助。

【讨论】:

  • 对不起,这没有帮助。根据我的问题,这是一个间歇性问题。意思是:它大部分时间都有效。
  • 这就是我写的,默认情况下你不需要做任何事情来在你的开发环境中提供静态文件。但是如果你不定期面对它,你可以通过这个来调整它。希望这会有所帮助..
  • 谢谢,但我认为这不是问题所在。它可能是围绕套接字处理稍低一些(即与 Django 代码而不是文件服务的配置有关)。
猜你喜欢
  • 1970-01-01
  • 2017-11-15
  • 2012-03-01
  • 2021-09-07
  • 1970-01-01
  • 2011-01-22
  • 2014-03-13
  • 2011-10-10
  • 1970-01-01
相关资源
最近更新 更多