2015-11-02 49 views
9

我在Heroku中創建一個簡單的網站時遇到了一些問題。該網站使用夾層創建並使用whitenoise和gunicorn。問題是:我在某些靜態資源中收到404錯誤,如css和js。您可以在http://blrg-advogados.herokuapp.com處看到問題。夾層 - 無法在Heroku中加載css和js

這是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"),) 

網址的.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 

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

Project layout

,並收集靜態的輸出是這樣的:

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 =真它工作正常,但因爲我想測試生產環境我需要使用DEBUG =假。我做錯了什麼?

+0

什麼是你的urls.py? – 1844144

+0

@ 1844144問題已通過urls.py更新 – brevleq

回答

3

每次啓動網頁動態碼時,您都不需要運行collectstaticheroku run python manage.py collectstatic --noinput的輸出是多少?

通過the heroku docs看,如果你已經完成這一步並不清楚:

Django將不會自動創建collectstatic用途,因此我們建議增加一個虛擬文件到你的資料庫的目標目錄,如看到這裏。

+0

我已添加日誌 – brevleq

0

您的靜態文件配置已損壞。 STATIC_ROOT需要像/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,], 
}] 

利用這種配置收集和靜態文件服務應該工作。如果它不起作用,請按照其他答案中的提示,提供有關項目目錄結構和heruko run manage.py collectstatic --noinput命令輸出的其他信息。

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

問候, 馬塞爾·邁斯納

+0

我已添加日誌 – brevleq

+0

您可以添加項目目錄佈局的說明嗎?此外,collectstatic命令的輸出,您提供的日誌只包含gunicorn生成的消息。 –

+0

我已經添加了請求的信息... – brevleq