You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path.

【问题】Heroku部署报错:

remote:        django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path.
remote: 
remote:  !     Error while running '$ python manage.py collectstatic --noinput'.

【分析原因】

1.错误提示没有设置STATIC_ROOT,查看设置STATIC_ROOT的原py文件:

settings.py:

# Heroku设置
if os.getcwd() == '/app':
    import dj_database_url
    DATABASES = {
        'default': dj_database_url.config(default='postgres://localhost')
    }

    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

    ALLOWED_HOSTS = ['*']

    PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

    STATIC_ROOT = 'staticfiles'

    STATICFILES_DIRS = (
        os.path.join(PROJECT_ROOT, 'static'),
        )

可以看到,settings.py中设置了STATIC_ROOT,没生效的原因是if 模块条件不满足

2.设置debug模式查看变量:

heroku config:set DEBUG_COLLECTSTATIC=1

参见官网:https://devcenter.heroku.com/articles/django-assets

remote: ****** Collectstatic environment variables:
remote: 
remote:        CPLUS_INCLUDE_PATH=/app/.heroku/vendor/include:/app/.heroku/python/include:
remote:        EXPORT_PATH=/app/tmp/buildpacks/779a8bbfbbe7e1b715476c0b23fc63a2103b3e4131eda558669aba8fb5e6e05682419376144189b29beb5dee6d7626b4d3385edb0954bffea6c67d8cf622fd51/bin/../export
remote:        SOURCE_VERSION=cd6b464f5547d9ad4e76d44a43726bebb7c30368
remote:        PROFILE_PATH=/tmp/build_cfa1044d9f6f7ba51f5503a4fd86a6e2/.profile.d/python.sh
remote:        DEBUG_COLLECTSTATIC=1
remote:        BUILDPACK_LOG_FILE=/dev/fd/3
remote:        LIBRARY_PATH=/app/.heroku/vendor/lib:/app/.heroku/python/lib:
remote:        CACHE_DIR=/app/tmp/cache
remote:        PYTHONUNBUFFERED=1
remote:        DEFAULT_PYTHON_STACK=cedar-14
remote:        LD_LIBRARY_PATH=/app/.heroku/vendor/lib:/app/.heroku/python/lib
remote:        BIN_DIR=/app/tmp/buildpacks/779a8bbfbbe7e1b715476c0b23fc63a2103b3e4131eda558669aba8fb5e6e05682419376144189b29beb5dee6d7626b4d3385edb0954bffea6c67d8cf622fd51/bin
remote:        DYNO=run.6619
remote:        PATH=/app/.heroku/python/bin:/app/.heroku/vendor/bin::/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/tmp/codon/vendor/bin:/app/tmp/buildpacks/779a8bbfbbe7e1b715476c0b23fc63a2103b3e4131eda558669aba8fb5e6e05682419376144189b29beb5dee6d7626b4d3385edb0954bffea6c67d8cf622fd51/vendor/:/app/tmp/buildpacks/779a8bbfbbe7e1b715476c0b23fc63a2103b3e4131eda558669aba8fb5e6e05682419376144189b29beb5dee6d7626b4d3385edb0954bffea6c67d8cf622fd51/vendor/pip-pop
remote:        ENV_DIR=/tmp/d20171027-69-1ccgm4m
remote:        RECOMMENDED_PYTHON_VERSION=python-3.6.2
remote:        C_INCLUDE_PATH=/app/.heroku/vendor/include:/app/.heroku/python/include:
remote:        PWD=/tmp/build_cfa1044d9f6f7ba51f5503a4fd86a6e2
remote:        BPLOG_PREFIX=buildpack.python
remote:        LANG=en_US.UTF-8
remote:        CACHED_PYTHON_STACK=heroku-16
remote:        STACK=heroku-16
remote:        SHLVL=3
remote:        REQUEST_ID=cb62d053-d9e7-58a0-a77c-eeed27ca3efa
remote:        HOME=/app
remote:        LATEST_2=python-2.7.14
remote:        LATEST_3=python-3.6.2
remote:        PIP_UPDATE=9.0.1
remote:        BUILD_DIR=/tmp/build_cfa1044d9f6f7ba51f5503a4fd86a6e2
remote:        WARNINGS_LOG=/tmp/tmp.QRkojcYlAe
remote:        DEFAULT_PYTHON_VERSION=python-3.6.2
remote:        PKG_CONFIG_PATH=/app/.heroku/vendor/lib/pkgconfig:/app/.heroku/vendor/lib/pkg-config:/app/.heroku/python/lib/pkg-config:
remote:        _=/usr/bin/env

可以看到,当前工作目录不是'/app',且每次生成的目录都不一样(build后面的一串不固定),应该获取HOME目录。

PWD=/tmp/build_cfa1044d9f6f7ba51f5503a4fd86a6e2
HOME=/app

【解决方法】

if os.getcwd() == '/app':          #获取当前工作目录
改为:
if os.environ['HOME'] == '/app':   #获取HOME目录
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值