Python 使用DEBUG=False将我的Django网站部署到Heroku不会';行不通
当在localhost或heroku上部署django且DEBUG=False时,它会抛出一个错误Python 使用DEBUG=False将我的Django网站部署到Heroku不会';行不通,python,django,heroku,http-status-code-500,Python,Django,Heroku,Http Status Code 500,当在localhost或heroku上部署django且DEBUG=False时,它会抛出一个错误 C:\Users\krish\Envs\PRREMIA\lib\site-packages\whitenoise\base.py:105: UserWarning: No directory at: c:\Users\krish\Documents\python\PRREMIA\staticfiles\ warnings.warn(u'No directory at: {}'.format(r
C:\Users\krish\Envs\PRREMIA\lib\site-packages\whitenoise\base.py:105: UserWarning: No directory at: c:\Users\krish\Documents\python\PRREMIA\staticfiles\
warnings.warn(u'No directory at: {}'.format(root))
[28/Jul/2019 16:05:43] "GET / HTTP/1.1" 500 27
当DEBUG=True时,它工作正常
静态设置
STATIC\u ROOT=os.path.join(BASE\u DIR,'staticfiles')
静态URL='/STATIC/'
静态文件\u目录=(
join(BASE_DIR,'static'),
)
在
为什么??我该如何停下来解决这个问题
注意:
从中间件中删除whitenose中间件
并更改静态文件\u存储
#STATICFILES_STORAGE='whitenoise.STORAGE.CompressedManifestStaticFilesStorage'
STATICFILES\u STORAGE='django.contrib.STATICFILES.STORAGE.StaticFilesStorage'
已删除500错误,但仍然找不到staticfiles。您的staticfiles\u DIRS设置不正确:
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
这是指项目根目录中名为static
的目录,但没有这样的目录
看起来您的静态文件位于业务
应用程序中,在这种情况下,它们将自动拾取,这样您就可以完全删除静态文件\u DIRS
设置。配置Django/Create React App/Whitenoise以运行git deploy to Heroku应用程序,调试=False
首先感谢Whitenoise开发者,让这一切成为可能
在您的settings.py中
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'staticfiles')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'build/static'), os.path.join(BASE_DIR, 'build')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
在views.py中创建index.html的模板视图
from django.views.generic import TemplateView
from django.views.decorators.cache import never_cache
# Serve Single Page Application
index = never_cache(TemplateView.as_view(template_name='index.html'))
在URL.py中,向新视图添加路径
from django.urls import path, include, re_path
from .views import index
urlpatterns += [
re_path('.*', index)
]
在推送到heroku之前,先运行npm运行build
,然后运行python manage.py collectstatic
。这将把应用程序构建到构建文件夹中,然后将这些静态构建文件收集到项目根目录中的staticfiles文件夹中
如果python manage.py collectstatic
失败,首先在项目根目录中创建一个名为staticfiles的空目录
index-re_-path视图的要点是,在以“/login”这样的路径重新加载页面时,始终将应用程序指向index.html
git add .
git commit -m "blah"
git push heroku master
这对我来说很有效,希望在将来对人们有所帮助
如果这不起作用,我的建议是在本地运行
python manage.py runserver
,然后处理构建文件夹、staticfiles文件夹和settings.py,以了解发生了什么。我还建议登录以查找错误,尽管我自己没有这样做 Whitenoise处理静态文件。所以显示你的静态设置。Heroku不应该显示任何带有C:\
的内容。这是Windows风格的路径,Heroku不运行Windows。你在你的设置中包括绝对路径吗?@Chris没有,我一直在使用前斜杠。(老实说,直到几个月前我才知道Windows使用了反斜杠)。您还可以查看my,您应该检查您是否可以在本地运行python manage.py collectstatic
,并且没有任何错误。如果Heroku在编译项目时无法成功运行该命令,静态文件将无法工作。@12944qwerty,这不仅仅是反斜杠。这是C:
本身,以及对指向本地虚拟环境的Windows路径的引用:C:\Users\krish\Envs\PRREMIA
。代码中的某些内容引用了本地路径。您刚刚将问题改写为其他内容。这不是一个好主意,因为现在没有任何评论或答案对将来研究这一问题的人有意义。好吧,但我只是尝试了你的建议,不幸的是,它不起作用(