如何在Heroku和本地静态css上使用S3进行生产?

时间:2014-04-14 17:41:23

标签: django heroku amazon-s3 gruntjs

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

我仍然在本地开发应用程序。我一直在运行grunt sass并且在我正在努力时将scss文件缩小为css。

但是,我已将静态网址等设置为我的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/'

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在你的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文件。