Django静态文件未在Heroku中加载,GCS部署

问题描述 投票:0回答:1

因此,我创建了一个Django应用程序并将其与Heroku一起部署。静态文件(以及媒体)由GCS存储桶提供。

我目前在加载all静态文件时遇到问题。值得注意的是,png文件未加载,但其他所有文件都已加载。 png文件请求返回403错误,但其余文件(css,js等)加载正常。此外,通过媒体上传的jpg图像也将无错误返回。

我必须假定这是一个GCS问题,但是我不确定。我已经尝试了所有事情,包括为我的服务代理分配权限,创建另一个服务代理以及使用相同的数据重新创建另一个存储桶。

在将GCS存储桶与在Google App Engine或GKE上运行的应用程序一起使用时,我没有遇到这个问题。

在正确方向上的任何点都很好。

这是我的设置文件的相关部分。请注意,我故意将django_heroku.settings(locals())调用放在此代码块的上方,因为它会覆盖这些设置。

DEBUG = False

django_heroku.settings(locals())

DEFAULT_FILE_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'
STATICFILES_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'
GS_BUCKET_NAME = 'hello-world'
GCS_URL = 'https://storage.googleapis.com/'
STATIC_URL = '{}/{}/static/'.format(GCS_URL, GS_BUCKET_NAME)
MEDIA_URL = '{}/{}/media/'.format(GCS_URL, GS_BUCKET_NAME)
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

UPLOAD_ROOT = 'media/uploads/'
django heroku google-cloud-storage
1个回答
0
投票

我知道了。从CSS文件(背景图片等)中调用了丢失的文件。由于未使用{% static %}标签调用它们,因此未在调用中添加适当的签名,并且存储桶看到未经授权的尝试来访问文件。

我的解决方案是将这些调用直接移动到存储桶文件中,以便可以使用静态标记。

© www.soinside.com 2019 - 2024. All rights reserved.