在Heroku,GCS部署上无法加载Django静态文件

时间:2020-04-23 06:09:47

标签: django heroku google-cloud-storage

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

我目前在加载全部静态文件时遇到问题。值得注意的是,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/'

1 个答案:

答案 0 :(得分:0)

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

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