簡體   English   中英

夾層 - 無法在Heroku中加載css和js

[英]Mezzanine - Can't load css and js in Heroku

我在主持一個我在Heroku中創建的簡單網站時遇到了一些問題。 該網站使用Mezzanine創建並使用whitenoise和gunicorn。 問題是:我在一些靜態資源中遇到404錯誤,比如css和js。 您可以在http://blrg-advogados.herokuapp.com上查看問題。

這是Procfile內容:

web: python manage.py collectstatic --noinput; gunicorn --workers=4 site_advogados.wsgi 0.0.0.0:$PORT

wsgi.py

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site_advogados.settings")

from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise

application = get_wsgi_application()
application = DjangoWhiteNoise(application)

這是settings.py的一部分:

ALLOWED_HOSTS = ['*']
DEBUG = False
PROJECT_APP_PATH = os.path.dirname(os.path.abspath(__file__))
PROJECT_APP = os.path.basename(PROJECT_APP_PATH)
PROJECT_ROOT = BASE_DIR = os.path.dirname(PROJECT_APP_PATH)
CACHE_MIDDLEWARE_KEY_PREFIX = PROJECT_APP
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

MEDIA_URL = STATIC_URL + "media/"
MEDIA_ROOT = os.path.join(PROJECT_ROOT, *MEDIA_URL.strip("/").split("/"))
ROOT_URLCONF = "%s.urls" % PROJECT_APP
TEMPLATE_DIRS = (os.path.join(PROJECT_ROOT, "templates"),)

urls.py是這樣的:

from __future__ import unicode_literals
from django.conf.urls import patterns, include, url
from django.conf.urls.i18n import i18n_patterns
from django.contrib import admin
from mezzanine.core.views import direct_to_template
from mezzanine.conf import settings
from views import contato

admin.autodiscover()

urlpatterns = i18n_patterns("",
                        ("^admin/", include(admin.site.urls)),
                        )

if settings.USE_MODELTRANSLATION:
    urlpatterns += patterns('',
                        url('^i18n/$', 'django.views.i18n.set_language', name='set_language'),
                        )

urlpatterns += patterns('',
                    url("^$", direct_to_template, {"template": "index.html"}, name="home"),
                    url(r'^contato/$', contato, name='contato'),
                    ("^", include("mezzanine.urls")),
                    )

handler404 = "mezzanine.core.views.page_not_found"
handler500 = "mezzanine.core.views.server_error"

日志:

2015-12-27T12:44:56.109833+00:00 app[web.1]: Traceback (most recent call last):
2015-12-27T12:44:56.109850+00:00 app[web.1]:     self.handle_request(listener, req, client, addr)
2015-12-27T12:44:56.109851+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 171, in handle_request
2015-12-27T12:44:56.109852+00:00 app[web.1]:     respiter = self.wsgi(environ, resp.start_response)
2015-12-27T12:44:56.109853+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/whitenoise/base.py", line 119, in __call__
2015-12-27T12:44:56.109854+00:00 app[web.1]:     return self.application(environ, start_response)
2015-12-27T12:44:56.109855+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 189, in __call__
2015-12-27T12:44:56.109855+00:00 app[web.1]:     response = self.get_response(request)
2015-12-27T12:44:56.109857+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 175, in get_response
2015-12-27T12:44:56.109858+00:00 app[web.1]:     response = self.get_exception_response(request, resolver, 404)
2015-12-27T12:44:56.109858+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 90, in get_exception_response
2015-12-27T12:44:56.109861+00:00 app[web.1]:     return callback(request, **param_dict)
2015-12-27T12:44:56.109863+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/mezzanine/core/views.py", line 222, in server_error
2015-12-27T12:44:56.109861+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/decorators.py", line 110, in _wrapped_view
2015-12-27T12:44:56.109859+00:00 app[web.1]:     response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
2015-12-27T12:44:56.109862+00:00 app[web.1]:     response = view_func(request, *args, **kwargs)
2015-12-27T12:44:56.109860+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 268, in handle_uncaught_exception
2015-12-27T12:44:56.109864+00:00 app[web.1]:     return HttpResponseServerError(t.render(context))
2015-12-27T12:44:56.109864+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/backends/django.py", line 74, in render
2015-12-27T12:44:56.109865+00:00 app[web.1]:     return self.template.render(context)
2015-12-27T12:44:56.109866+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 209, in render
2015-12-27T12:44:56.109866+00:00 app[web.1]:     return self._render(context)
2015-12-27T12:44:56.109867+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 201, in _render
2015-12-27T12:44:56.109868+00:00 app[web.1]:     return self.nodelist.render(context)
2015-12-27T12:44:56.109869+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 903, in render
2015-12-27T12:44:56.109870+00:00 app[web.1]:     bit = self.render_node(node, context)
2015-12-27T12:44:56.109870+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 917, in render_node
2015-12-27T12:44:56.109871+00:00 app[web.1]:     return node.render(context)
2015-12-27T12:44:56.109872+00:00 app[web.1]:     return compiled_parent._render(context)
2015-12-27T12:44:56.109872+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/loader_tags.py", line 135, in render
2015-12-27T12:44:56.109874+00:00 app[web.1]:     return self.nodelist.render(context)
2015-12-27T12:44:56.109873+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 201, in _render
2015-12-27T12:44:56.109875+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 903, in render
2015-12-27T12:44:56.109875+00:00 app[web.1]:     bit = self.render_node(node, context)
2015-12-27T12:44:56.109878+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/templatetags/static.py", line 105, in render
2015-12-27T12:44:56.109876+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 917, in render_node
2015-12-27T12:44:56.109877+00:00 app[web.1]:     return node.render(context)
2015-12-27T12:44:56.109878+00:00 app[web.1]:     url = self.url(context)
2015-12-27T12:44:56.109879+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/templatetags/staticfiles.py", line 16, in url
2015-12-27T12:44:56.109880+00:00 app[web.1]:     return static(path)
2015-12-27T12:44:56.109882+00:00 app[web.1]:     return staticfiles_storage.url(path)
2015-12-27T12:44:56.109881+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/templatetags/staticfiles.py", line 9, in static
2015-12-27T12:44:56.109884+00:00 app[web.1]:     hashed_name = self.stored_name(clean_name)
2015-12-27T12:44:56.109883+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 131, in url
2015-12-27T12:44:56.109884+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 280, in stored_name
2015-12-27T12:44:56.109885+00:00 app[web.1]:     cache_name = self.clean_name(self.hashed_name(name))
2015-12-27T12:44:56.109886+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 94, in hashed_name
2015-12-27T12:44:56.109886+00:00 app[web.1]:     (clean_name, self))
2015-12-27T12:44:56.109887+00:00 app[web.1]: ValueError: The file 'img/favicon.ico' could not be found with <whitenoise.django.GzipManifestStaticFilesStorage object at 0x7f6dc4a1e2d0>.
2015-12-27T12:44:56.329261+00:00 app[web.1]: [2015-12-27 12:44:56 +0000] [15] [ERROR] Error handling request
2015-12-27T12:44:56.329266+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 130, in handle
2015-12-27T12:44:56.329265+00:00 app[web.1]: Traceback (most recent call last):
2015-12-27T12:44:56.329268+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 171, in handle_request
2015-12-27T12:44:56.329267+00:00 app[web.1]:     self.handle_request(listener, req, client, addr)
2015-12-27T12:44:56.329270+00:00 app[web.1]:     respiter = self.wsgi(environ, resp.start_response)
2015-12-27T12:44:56.329272+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/whitenoise/base.py", line 119, in __call__
2015-12-27T12:44:56.329287+00:00 app[web.1]:     return self.application(environ, start_response)
2015-12-27T12:44:56.329288+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 189, in __call__
2015-12-27T12:44:56.329288+00:00 app[web.1]:     response = self.get_response(request)
2015-12-27T12:44:56.329289+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 175, in get_response
2015-12-27T12:44:56.329290+00:00 app[web.1]:     response = self.get_exception_response(request, resolver, 404)
2015-12-27T12:44:56.329290+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 90, in get_exception_response
2015-12-27T12:44:56.329292+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 268, in handle_uncaught_exception
2015-12-27T12:44:56.329291+00:00 app[web.1]:     response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
2015-12-27T12:44:56.329292+00:00 app[web.1]:     return callback(request, **param_dict)
2015-12-27T12:44:56.329293+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/decorators.py", line 110, in _wrapped_view
2015-12-27T12:44:56.329293+00:00 app[web.1]:     response = view_func(request, *args, **kwargs)
2015-12-27T12:44:56.329294+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/mezzanine/core/views.py", line 222, in server_error
2015-12-27T12:44:56.329295+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/backends/django.py", line 74, in render
2015-12-27T12:44:56.329294+00:00 app[web.1]:     return HttpResponseServerError(t.render(context))
2015-12-27T12:44:56.329296+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 209, in render
2015-12-27T12:44:56.329295+00:00 app[web.1]:     return self.template.render(context)
2015-12-27T12:44:56.329297+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 201, in _render
2015-12-27T12:44:56.329296+00:00 app[web.1]:     return self._render(context)
2015-12-27T12:44:56.329297+00:00 app[web.1]:     return self.nodelist.render(context)
2015-12-27T12:44:56.329297+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 903, in render
2015-12-27T12:44:56.329298+00:00 app[web.1]:     bit = self.render_node(node, context)
2015-12-27T12:44:56.329298+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 917, in render_node
2015-12-27T12:44:56.329299+00:00 app[web.1]:     return node.render(context)
2015-12-27T12:44:56.329299+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/loader_tags.py", line 135, in render
2015-12-27T12:44:56.329300+00:00 app[web.1]:     return compiled_parent._render(context)
2015-12-27T12:44:56.329306+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 201, in _render
2015-12-27T12:44:56.329307+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 903, in render
2015-12-27T12:44:56.329307+00:00 app[web.1]:     return self.nodelist.render(context)
2015-12-27T12:44:56.329308+00:00 app[web.1]:     return node.render(context)
2015-12-27T12:44:56.329307+00:00 app[web.1]:     bit = self.render_node(node, context)
2015-12-27T12:44:56.329308+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 917, in render_node
2015-12-27T12:44:56.329310+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/templatetags/staticfiles.py", line 16, in url
2015-12-27T12:44:56.329309+00:00 app[web.1]:     url = self.url(context)
2015-12-27T12:44:56.329313+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 94, in hashed_name
2015-12-27T12:44:56.329308+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/templatetags/static.py", line 105, in render
2015-12-27T12:44:56.329314+00:00 app[web.1]: ValueError: The file 'img/favicon.ico' could not be found with <whitenoise.django.GzipManifestStaticFilesStorage object at 0x7f6dc4a1e2d0>.
2015-12-27T12:44:56.329310+00:00 app[web.1]:     return static(path)
2015-12-27T12:44:56.329313+00:00 app[web.1]:     cache_name = self.clean_name(self.hashed_name(name))
2015-12-27T12:44:56.329312+00:00 app[web.1]:     hashed_name = self.stored_name(clean_name)
2015-12-27T12:44:56.329312+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 280, in stored_name
2015-12-27T12:44:56.329314+00:00 app[web.1]:     (clean_name, self))
2015-12-27T12:44:56.329311+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 131, in url
2015-12-27T12:44:56.329311+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/templatetags/staticfiles.py", line 9, in static
2015-12-27T12:44:56.329311+00:00 app[web.1]:     return staticfiles_storage.url(path)
2015-12-27T12:44:56.330945+00:00 heroku[router]: at=info method=GET path="/favicon.ico/" host=blrg-advogados.herokuapp.com request_id=3c54ce79-8686-42a9-a335-f217abb8d6f2 fwd="177.36.203.24" dyno=web.1 connect=2ms service=31ms status=500 bytes=244

我的項目文件夾是這樣的:

項目布局

而收集靜態的輸出是這樣的:

Running python manage.py collectstatic --noinput on blrg-advogados... up, run.4811
Traceback (most recent call last):
File "manage.py", line 14, in <module>
execute_from_command_line(sys.argv)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 351, in execute_from_command_line
utility.execute()
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 343, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/base.py", line 394, in run_from_argv
self.execute(*args, **cmd_options)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/base.py", line 445, in execute
output = self.handle(*args, **options)
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 168, in handle
collected = self.collect()
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 98, in collect
for path, storage in finder.list(self.ignore_patterns):
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/finders.py", line 112, in list
for path in utils.get_files(storage, ignore_patterns):
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/utils.py", line 28, in get_files
directories, files = storage.listdir(location)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/files/storage.py", line 300, in listdir
for entry in os.listdir(path):
OSError: [Errno 2] No such file or directory: '/app/site_advogados/static'

你可以想象,當我設置DEBUG = True時它可以正常工作,但是因為我想測試生產環境,我需要使用DEBUG = False 我做錯了什么?

每次啟動web dyno時都不需要運行collectstatic heroku run python manage.py collectstatic --noinput的輸出是什么?

瀏覽heroku文檔 ,目前尚不清楚您是否已執行此步驟:

Django不會自動創建collectstatic使用的目標目錄,因此我們建議將虛擬文件添加到存儲庫,如此處所示。

您的靜態文件配置已損壞。 STATIC_ROOT需要是/some/absolute/path/這樣的/some/absolute/path/ TEMPLATE_DIRS設置已過時,假設您使用的是Django 1.8,則可以使用TEMPLATE dict。 APP_DIRS選項使django在所有已安裝的應用程序目錄中查找模板目錄。 可以使用DIR選項將其他目錄添加為列表。

這就是settings.py應該是這樣的(我需要你的項目目錄布局才能確定):

ALLOWED_HOSTS = ['*']
DEBUG = False
PROJECT_APP_PATH = os.path.dirname(os.path.abspath(__file__))
PROJECT_APP = os.path.basename(PROJECT_APP_PATH)
BASE_DIR = os.path.dirname(PROJECT_APP_PATH)
CACHE_MIDDLEWARE_KEY_PREFIX = PROJECT_APP
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
# This is the path where Django will store the collected files
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
# STATICFILES_DIRS must contain the absolut path to your static resources
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
    # add more paths with static files here 
)

MEDIA_URL = STATIC_URL + "media/"
MEDIA_ROOT = os.path.join(BASE_DIR, *MEDIA_URL.strip("/").split("/"))
ROOT_URLCONF = "%s.urls" % PROJECT_APP

TEMPLATES = [{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'APP_DIRS': True,
    # Additional directories to look for templates
    'DIRS': [some_template_directory,],
}]

使用此配置集合和靜態文件的服務應該工作。 如果它不起作用,請提供有關您的Projects目錄結構和heruko run manage.py collectstatic --noinput命令的輸出的其他信息,如另一個答案中所述。

最后但並非最不重要的是,永遠不能從互聯網訪問您的調試應用程序。 具有惡意意圖的人可以從調試消息中了解有關您的設置的很多信息。

此致,MarcelMeißner

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM