django - Django 创建静态文件夹
问题描述
在 Google Cloud Storage 上使用“collectstatic”上传我的静态数据时,它会将文件上传到存储桶的主根目录,而不是在名为“/static/”的文件夹中,因此生产网络无法读取静态数据。如何创建文件夹“/static/”并将文件上传到 GCS?
这是我的设置:
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.html https://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 设置引用这些其他静态文件。
在你的 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.html https://medium.com/@umeshsaruk/upload-to-google-cloud-storage-using-django-storages-72ddec2f0d05
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 解决方案的链接:Serve Static files from Google Cloud Storage Bucket (for Django App hosting on GCE)。
推荐阅读
- amazon-web-services - SSL AWS EC2 后端和 S3 前端
- python - Python:如何用 while 循环替换这个 for 循环?(没有负值)
- r - 'sf' 软件包的安装具有非零退出状态,CentOS7(在集群上)
- php - 如何使用子行(数据表)在子行中添加信息
- java - 我需要从哪里捕获 IO 异常?我的世界插件
- google-cloud-platform - 从没有外部 IP 的计算实例访问谷歌存储
- google-cloud-platform - 当没有为项目分配组织时,“内部”用户类型 oauth 设置有什么作用?
- android - AWS SNS 自动添加 Android 平台终端节点
- javascript - 使用 chartjs 的第二张图表未在网站上显示
- .net-core - .NET Core 按项目或按部分配置文件的优先级?