【问题标题】:How to use S3 for Production on Heroku and local static css for development?如何在 Heroku 上使用 S3 进行生产和本地静态 css 进行开发?
【发布时间】:2014-04-14 17:41:23
【问题描述】:

我刚刚在我的 Django 应用中安装了 Grunt。在我的blogengine 应用程序中,我有文件夹:assets/css/global.scss。 Grunt 将此 .scss 文件缩小为 static/css/global.css

我仍在本地开发应用程序。我一直在运行 grunt sass 并观察将 scss 文件缩小为 css,因为我正在处理它。

但是,我已将静态 url 等设置为我的 Amazon S3 存储桶。这意味着当我运行 collectstatic 时,我必须等待很长时间才能将其上传到 S3,这样我才能看到我的更改。

我希望最终将其部署到 Heroku,但与此同时,如何设置静态内容以在本地工作并设置生产设置以使用 S3?

这在 settings.py 中:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.6/howto/static-files/

STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

AWS_ACCESS_KEY_ID = 'XXXXXXXXXXXXXX'
AWS_SECRET_ACCESS_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
AWS_STORAGE_BUCKET_NAME = 'ingledow'

STATIC_URL = 'http://ingledow.s3.amazonaws.com/'

【问题讨论】:

    标签: django heroku amazon-s3 gruntjs


    【解决方案1】:

    您可能会弄乱调试设置。在本地开发中,将 DEBUG 设置为 True,Django 将处理所有静态文件的服务。一旦你投入生产,将 DEBUG 设置为 False,S3 设置就会启动。你可以有不同的设置文件,或者你可以在本地和 Heroku 上设置一个环境变量并在你的设置中调用它(即:`DEBUG = os.环境['DEBUG']。

    【讨论】:

      【解决方案2】:

      在你的 bashrc 中,设置一个环境标志:

      alias DJANGO_ENV=local
      

      (或者,只需在本地 shell 中执行此操作:export DJANGO_ENV=local)

      然后在settings.py中:

      import os
      if os.environ.get( 'DJANGO_ENV', '' ) == 'local':
        # SETUP LOCAL SETTINGS
      else:
        STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
      
        AWS_ACCESS_KEY_ID = 'XXXXXXXXXXXXXX'
        AWS_SECRET_ACCESS_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
        AWS_STORAGE_BUCKET_NAME = 'ingledow'
      
        STATIC_URL = 'http://ingledow.s3.amazonaws.com/'
      

      在执行 pushstatic 时关闭本地设置(例如“unset DJANGO_ENV”)。在生产环境中(即 Heroku),您将没有 DJANGO_ENV 系统变量,因此它将默认为 AWS 文件。

      【讨论】:

        猜你喜欢
        • 2011-11-14
        • 1970-01-01
        • 2017-03-15
        • 2021-07-29
        • 2017-09-06
        • 1970-01-01
        • 2019-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多