django - collecstatic 不会推送到文件 S3

标签 django heroku amazon-s3 django-staticfiles collectstatic

编辑:

我发现从 settings.py 文件中删除 import django_heroku 允许我将静态文件推送到我的 AWS 存储桶。当我取消注释 import django_heroku 时,collectstatic 然后将我的文件推送到 staticfiles 文件夹。

manage.pycollectstatic#import django_heroku:

You have requested to collect static files at the destination location as specified in your settings.

maange.pycollectstaticimport django_heroku:

You have requested to collect static files at the destination location as specified in your settings: /path/to/project/staticfiles

我不知道这是为什么,也不知道如何解决。现在的问题是:如何在 Heroku 上为我的 django 应用程序运行collectstatic?或者我需要使用 nostatic 运行我的 heroku 实例吗? (例如runserver --nostatic)

问题:

每当我运行python manage.pycollectstatic时,我的所有静态文件都会被放入本地“staticfiles”文件夹中。我已设置 STATICFILES_STORAGE = myapp.aws.utils.StaticRootS3Boto3Storage 但文件始终转到“myapp/staticfiles”。

Settings.py:

AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = config('AWS_SECRET_ACCESS_KEY')
AWS_FILE_EXPIRE = 200
AWS_PRELOAD_METADATA = True
AWS_QUERYSTRING_AUTH = True

DEFAULT_FILE_STORAGE = 'myapp.aws.utils.MediaRootS3Boto3Storage'
STATICFILES_STORAGE = 'myapp.aws.utils.StaticRootS3Boto3Storage'
AWS_STORAGE_BUCKET_NAME = config('AWS_STORAGE_BUCKET_NAME')
S3DIRECT_REGION='us-east-1'

AWS_S3_URL = '//s3.amazonaws.com/%s' % AWS_STORAGE_BUCKET_NAME

MEDIA_URL = 'http://s3.amazonaws.com/%s/media/' % AWS_STORAGE_BUCKET_NAME
MEDIA_ROOT = MEDIA_URL

STATIC_URL = AWS_S3_URL + '/static/'
STATICFILES_LOCATION = STATIC_URL
MEDIAFILES_LOCATION = 'media'
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

AWS_HEADERS = {
    'Expires': 'Thu, 31 Dec 2099 20:00:00 GMT',
    'CacheControl': 'max-age=94608000',
}

myapp/aws/utils.py:

from storages.backends.s3boto3 import S3Boto3Storage

StaticRootS3Boto3Storage = lambda: S3Boto3Storage(location='static')
MediaRootS3Boto3Storage  = lambda: S3Boto3Storage(location='media')

项目结构:

myproject/
 |-- myapp/
 |    |-- aws/
 |    |    |-- __init__.py
 |    |    |-- utils.py
 |    |-- __init__.py
 |    |-- settings.py
 |    |-- urls.py
 |    +-- wsgi.py
 +-- manage.py
 |-- static/
 |   |-- scss
 |   |-- css
 |   |-- js
 |   |-- images
 |-- staticfiles/
 |    |-- **ALL STATIC FILES END UP HERE** 

注释:

  • 更改 STATICFILES_STORAGE 似乎对输出没有影响
  • python manage.pycollectstatic 结果:

    您已请求在目的地收集静态文件 您的设置中指定的位置:
    /Users/nickmancini/Development/myapp/staticfiles

  • 我没有收到任何错误消息。所有文件均已在本地 staticfiles 文件夹中成功创建。

  • 媒体文件已成功上传到我的 S3 存储桶,但静态文件始终位于/Users/me/myproject/myapp/staticfiles

  • 根据文档,设置 STATICFILES_STORAGES 后“您所要做的就是运行collectstatic,您的静态文件将通过存储包推送到 S3”

问题:

  • 我还可以提供哪些其他有用的信息?

我查阅过的资源:

最佳答案

对于任何面临同样问题的人,我的解决方案是:django_heroku.settings(locals(), staticfiles=False)

which is also detailed at this github issue.

关于django - collecstatic 不会推送到文件 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49742714/

相关文章:

amazon-web-services - AWS Lambda : org. apache.http.conn.ConnectTimeoutException

python - django 使用 celery 任务发送电子邮件

javascript - JQuery加载方法中使用post传递数据

python - Django 如何在 django-admin 中将 <bound method ... >> 对象显示为字符串对象?

ruby-on-rails - 代码推送到 heroku 不起作用

amazon-s3 - Laravel 5.2 S3 上传错误

django - 如何在 direct_to_template 上免除 CSRF 保护

node.js - Foreman 忽略 .foreman 文件中的默认端口

ruby-on-rails - 事件记录查询和 heroku 问题。

amazon-web-services - 使用当前日期在 AWS S3 存储桶中创建一个文件夹