【问题标题】:Heroku/Django - staticfiles are copied but impossible to display themHeroku/Django - 静态文件被复制但无法显示它们
【发布时间】:2014-12-06 21:48:17
【问题描述】:

我在 heroku 中有一个项目,但我无法让静态文件正常工作。

settings.py:

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

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

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATICFILES_DIRS = ()

我已经看到很多问题都通过将它添加到 url 来解决,所以我已经完成了,但它并没有改变任何东西。

urls.py:

urlpatterns += patterns('',
(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
    'document_root': settings.STATIC_ROOT
}),)

然后 collectstatic 正常工作:

-----> Preparing static assets
   Running collectstatic...
   673 static files copied to '/app/static'.

所以它们作为命令发送:heroku run ls -lsay:

heroku run ls -l
Running `ls -l` attached to terminal... up, run.9609
total 76
-rw-------  1 u3968 3968   16 2014-10-12 02:05 contributors.txt
drwx------  2 u3968 3968 4096 2014-10-12 02:05 corelib
-rw-------  1 u3968 3968  137 2014-10-12 02:05 dev-requirements.txt
-rwx------  1 u3968 3968  810 2014-10-12 02:05 go.sh
-rw-------  1 u3968 3968    0 2014-10-12 02:05 __init__.py
-rw-------  1 u3968 3968  129 2014-10-12 02:05 __init__.pyc
-rwx------  1 u3968 3968  898 2014-10-12 02:05 manage.py
-rw-------  1 u3968 3968   12 2014-10-12 02:05 Procfile
-rw-------  1 u3968 3968  851 2014-10-12 02:05 requirements.txt
-rw-------  1 u3968 3968   13 2014-10-12 02:05 runtime.txt
-rw-------  1 u3968 3968 7385 2014-10-12 02:05 settings.py
-rw-------  1 u3968 3968 6750 2014-10-12 02:05 settings.pyc
drwx------ 10 u3968 3968 4096 2014-10-12 02:05 static
drwx------  3 u3968 3968 4096 2014-10-12 02:05 templates
drwx------  3 u3968 3968 4096 2014-10-12 02:05 theming
-rw-------  1 u3968 3968 3482 2014-10-12 02:05 urls.py
drwx------  3 u3968 3968 4096 2014-10-12 02:05 useraccount
-rw-------  1 u3968 3968  200 2014-10-12 02:05 wsgi.py

但是 url /static 返回一个 404 作为 heroku 的日志:

2014-10-12 02:06:05.751101+00:00 heroku router - - at=info method=GET path="/static/css/screen.css"   ... dyno=web.1 connect=0ms service=54ms status=404 bytes=1879

我错过了什么?

【问题讨论】:

    标签: django heroku django-staticfiles


    【解决方案1】:

    好的,我已经通过将所有静态文件发送到 git 对它们进行了版本控制,现在它可以工作了!

    我实际上尝试做两件相反的事情...不将静态发送到 git 并且不使用第三方应用程序来收集它们...

    【讨论】:

      【解决方案2】:

      你试过 {% static "css/screen.css" %}

      【讨论】:

      • 我已经通过 {% load staticfiles %} 加载了所有静态文件
      【解决方案3】:

      您的 URL 无关紧要,因为当 DEBUG 为 False 时 Django 不提供静态文件。您需要配置您的服务器以独立完成:通常您会通过 Apache/nginx 来完成,但 Heroku 不使用这些。然而,full documentation 介绍了如何让它工作,归结为安装 dj-static 并包装你的 WSGI 应用程序。

      【讨论】:

      • 我在 debug=true 中,因为它只是一个开发服务器,我尝试遵循此文档,但效果不佳...也许我错过了以下内容,我会再试一次不过。
      • 好的,现在,我有 WSGI 和 dj-static,我仍然在 DEBUG=True 并且没有任何工作了......
      【解决方案4】:

      你的settings.py应该是这样的:

      import os
      BASE_DIR = os.path.dirname(os.path.dirname(__file__))
      
      STATIC_ROOT = 'staticfiles'
      STATIC_URL = '/static/'
      
      STATICFILES_DIRS = (
          os.path.join(BASE_DIR, 'static'),
      )
      
      ...
      

      【讨论】:

      • 如果是 staticfiles_dirs 的问题,collectstatic 将不起作用,所以它不是来自这里。实际上让 staticfiles_dirs 空白允许我的默认 STATICFILES_FINDERS 启动以查找我的静态文件,它工作得很好,但我的问题是一旦它们在服务器上提供这些文件(就是这种情况)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 2023-03-20
      • 2013-10-26
      • 2018-08-31
      • 1970-01-01
      • 2015-11-06
      • 2021-05-30
      相关资源
      最近更新 更多