【问题标题】:Heroku, django-storages, and s3: Collectstatic works locally but not on HerokuHeroku、django-storages 和 s3:Collectstatic 在本地工作,但不在 Heroku 上
【发布时间】:2013-10-31 22:20:54
【问题描述】:

我关注了最热门的答案 herehere,当我在本地收集静态时一切都按预期工作,但当我从 heroku 实例收集静态时却没有。

我的settings.pys3utils.py 文件都位于与主manage.py 相邻的myproject 文件夹中。

s3utils.py:

from storages.backends.s3boto import S3BotoStorage

MediaRootS3BotoStorage  = lambda: S3BotoStorage(location='media')
StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static')

settings.py

DEFAULT_FILE_STORAGE = 'myproject.s3utils.MediaRootS3BotoStorage'
STATICFILES_STORAGE = 'myproject.s3utils.StaticRootS3BotoStorage'
AWS_ACCESS_KEY_ID = 'XXXXXXXXXXXXXXXXXXXXX'
AWS_SECRET_ACCESS_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXX'
AWS_STORAGE_BUCKET_NAME = 'myproject'
AWS_PRELOAD_METADATA = True # necessary to fix manage.py collectstatic command to only upload changed files instead of all files

STATIC_URL = 'https://s3.amazonaws.com/myproject/static/'
ADMIN_MEDIA_PREFIX = 'https://s3.amazonaws.com/myproject/static/admin/'
MEDIA_URL = 'https://s3.amazonaws.com/myproject/media/'

当我在本地运行 collectstatic 时,它成功地将我的所有文件复制到 s3。又来了,你可以看到它起作用了:

(venv)robbie@ubuntu:~/git/myproject$ ./manage.py collectstatic --noinput

0 static files copied, 5357 unmodified.

但是,每当我部署和访问我的站点或尝试通过 heroku 运行 collectstatic 时,我都会得到以下信息:

(venv)robbie@ubuntu:~/git/myproject$ heroku run ./manage.py collectstatic --noinput
Running `./manage.py collectstatic --noinput` attached to terminal... up, run.5714
Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 453, in execute_from_command_line
    utility.execute()
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 272, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 78, in load_command_class
    return module.Command()
  File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 58, in __init__
    self.storage.path('')
  File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/functional.py", line 202, in inner
    self._setup()
  File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 307, in _setup
    self._wrapped = get_storage_class(settings.STATICFILES_STORAGE)()
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/files/storage.py", line 290, in get_storage_class
    raise ImproperlyConfigured('Error importing storage module %s: "%s"' % (module, e))
django.core.exceptions.ImproperlyConfigured: Error importing storage module myproject.s3utils: "No module named s3utils"

任何帮助将不胜感激。

【问题讨论】:

    标签: django heroku amazon-s3 django-staticfiles django-storage


    【解决方案1】:

    没关系,这是一个愚蠢的错误,但我会把它留在这里以防其他人偶然发现,准备好了吗...?

    请务必在创建后将 myproject/s3utils.py 添加到您的 git 存储库!

    我不是个聪明人..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 2021-05-10
      • 2021-04-26
      相关资源
      最近更新 更多