当我在Google Cloud Storage上用' collectstatic'上传静态数据时,它会将文件上传到bucket的主根目录,而不是一个名为"/static/"的文件夹中,因此生产端的web无法读取静态数据。如何创建文件夹"/static/"把文件上传到全球定位系统
这是我的设置:
ALLOWED_HOSTS = ["*"]
DEBUG = True
INSTALLED_APPS += ["django_extensions", ]
DEFAULT_FILE_STORAGE = "storages.backends.gcloud.GoogleCloudStorage"
STATICFILES_STORAGE = "storages.backends.gcloud.GoogleCloudStorage"
GS_BUCKET_NAME = "static-bucket"
GS_MEDIA_BUCKET_NAME = "bucket-name"
加载静态文件GCS
进入GCP: Cloud Storage (GCS),点击CREATE BUCKET(根据需要填充)
一旦创建,如果你想让它像你的网站的CDN(存储你的静态文件,如css,图像,视频等),你可以使它公开
转到新创建的存储桶转到权限,然后单击添加成员添加新成员"allUsers"云存储-存储对象查看器"参考:https://cloud.google.com/storage/docs/quickstart-console主要参考文献:
https://django-storages.readthedocs.io/en/latest/backends/gcloud.htmlhttps://medium.com/@umeshsaruk/upload-to-google-cloud-storage-using-django-storages-72ddec2f0d05前提步骤
进入GCP: Cloud Storage (GCS),点击CREATE BUCKET(根据需要填充)
一旦创建,如果你想让它像你的网站的CDN(存储你的静态文件,如css,图像,视频等),你可以使它公开
转到新创建的存储桶转到权限,然后单击添加成员添加新成员"allUsers"云存储-存储对象查看器"参考:https://cloud.google.com/storage/docs/quickstart-console
第一步1(更容易和更快,但需要不断手动复制文件到GCS)
在settings.py中配置Django的静态文件设置
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'templates'),
os.path.join(BASE_DIR, "yourapp1", "templates"),
os.path.join(BASE_DIR, "yourapp2", "static"),
os.path.join(BASE_DIR, "watever"),
"/home/me/Music/TaylorSwift/",
"/home/me/Videos/notNsfw/",
]
STATIC_ROOT = "/var/www/mywebsite/"
STATIC_URL = "https://storage.googleapis.com/<your_bucket_name>/"
步骤2如果你有HTML文件或CSS文件访问其他静态文件,确保他们引用这些其他静态文件与此更新的STATIC_URL设置。
In your home.html
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'home/css/home.css' %}">
在你的home.css文件
background-image: url("../assets/img/myHandsomeImage.jpg");
你可以从我提供的链接中阅读参考文献。
https://django-storages.readthedocs.io/en/latest/backends/gcloud.htmlhttps://medium.com/@umeshsaruk上传- -谷歌云存储-使用django -存储- 72 ddec2f0d05
You home CSS link now will translate to :
https://storage.googleapis.com/[your_bucket_name]/home/css/home.css
如果你愿意,你可以只放置绝对路径(完整的URL),但这样的配置总是需要你手动更新使用的URL,就像如果你切换到开发模式,只想访问本地的静态文件,而不是从GCS。这会将STATICFILES_DIRS中每个目录中的所有文件复制到STATIC_ROOT目录。
python3 manage.py collectstatic
# or if your STATIC_ROOT folder requires permissions to write to it then:
# sudo python3 manage.py collectstatic
好的,通过stackoverflow搜索后,我看到这个问题已经解决了,我不希望这是一个重复的形式。所以这里是stackoverflow解决方案的链接:从谷歌云存储桶中提供静态文件(用于托管在GCE上的Django应用程序)。