我在Django中有一个应用程序,我在heroku上部署它但我无法在服务器上提供静态文件,下面是我的代码和设置:
settings.朋友
DEBUG = True
TEMPLATE_DEBUG = DEBUG
import os
PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))
SITE_PATH = os.path.abspath(os.path.join(PROJECT_PATH, os.path.pardir))
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(SITE_PATH, 'staticfiles'),)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
URLs.朋友
from django.conf import settings
from django.conf.urls import patterns, include, url
from polls.views import VoteClassBasedView
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^polls/', include('polls.urls')),
url(r'^admin/', include(admin.site.urls)),
)
Procfile
web: gunicorn django_polls.wsgi
我的本地目录结构
drwxrwxr-x 2 user1 user1 4096 Jul 5 11:48 django_polls/
-rwxr-xr-x 1 user1 user1 255 Jun 22 15:50 manage.py*
drwxrwxr-x 5 user1 user1 4096 Jul 3 14:41 polls/
-rw-r--r-- 1 user1 user1 50176 Jul 5 11:41 polls.db
-rw-rw-r-- 1 user1 user1 32 Jul 4 18:57 Procfile
-rw-rw-r-- 1 user1 user1 338 Jun 25 18:51 README.md
-rw-rw-r-- 1 user1 user1 310 Jul 4 17:09 requirements.txt
drwxrwxr-x 5 user1 user1 4096 Jul 4 17:57 staticfiles/
/bootstrap
/admin
/polls
drwxrwxrwx 3 user1 user1 4096 Jun 22 18:59 templates/
Heroku文件结构
drwx------ 2 u19068 19068 4096 2013-07-05 11:31 django_polls/
-rwx------ 1 u19068 19068 255 2013-07-05 11:28 manage.py*
drwx------ 5 u19068 19068 4096 2013-07-05 11:31 polls/
-rw------- 1 u19068 19068 32 2013-07-05 11:28 Procfile
-rw------- 1 u19068 19068 338 2013-07-05 11:28 README.md
-rw------- 1 u19068 19068 310 2013-07-05 11:28 requirements.txt
-rw------- 1 u19068 19068 13 2013-07-05 11:28 runtime.txt
drwx------ 5 u19068 19068 4096 2013-07-05 11:28 staticfiles/
/bootstrap
/admin
/polls
drwx------ 3 u19068 19068 4096 2013-07-05 11:28 templates/
上面的代码能够在本地机器上提供css文件(实际上我与bootstrap集成),但是在将它提交到heroku git hub并运行类似polls.herokuapp.com/polls/
之类的url后,它正在提供html文件和整个功能但无法提供css文件。
此外,当我运行命令foreman start
时,它也提供静态(css,js)文件,但是在heroku上部署时相同的代码无法为静态文件提供服务。
谁能告诉我需要在哪些文件中进行哪些更改才能在heroku上部署Django应用程序?
请注意,我已经完成了研发并应用了各种代码,例如在from django.contrib.staticfiles.urls import staticfiles_urlpatterns
中使用urls.py
但无法获得解决方案。
在部署应用程序时,首先在设置文件中更改DEBUG=FALSE
。
以下链接可能很有用。
https://devcenter.heroku.com/articles/django#deploy-to-heroku
要提供静态文件,我强烈建议您使用whitenoise http://whitenoise.evans.io/en/stable/django.html
STATIC_ROOT = os.path.join(PROJECT_PATH, 'staticfiles')
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
MIDDLEWARE_CLASSES = [
# 'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
# ...
]
无需运行collectstatic
,因为heroku将为您执行此操作。这样做是为了将所有文件放入STATIC_ROOT
(所有文件都是压缩的,并且使用散列文件名进行长期过期)。