【问题标题】:Django-pipeline is not been able to access a file. Access Denied ErrorDjango 管道无法访问文件。访问被拒绝错误
【发布时间】:2026-02-13 16:45:02
【问题描述】:

我正在使用 Django-pipeline 进行资产缩小和压缩,但是当我尝试运行时似乎出现错误

./manage collectstatic

我收到以下错误..

django.core.exceptions.SuspiciousFileOperation: Attempted access to '/home/darwesh/projects/first/api/static/js/app/check.js' denied.

这是我的 settings.py 文件

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

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'api/static'),
)

STATIC_ROOT = os.path.join(BASE_DIR, 'api/static_final/')

STATIC_URL = '/static/'

STATIC_PATH = os.path.join(BASE_DIR, 'api/static/')


# pipeline settings 
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
PIPELINE_JS = {
    'check': {
        'source_filenames' : (
            STATIC_PATH + 'js/app/controllers.js',
        ),
        'output_filename': STATIC_PATH + 'js/app/check.js',
    },
}

这是我的文件结构

project 
|__api
   |__static
      |__js
         |__app
            |__ controllers.js
            |__ check.js  # expected output file

【问题讨论】:

    标签: django django-staticfiles django-pipeline


    【解决方案1】:

    删除

    STATIC_PATH +
    

    来自source_filenamesoutput_filename

    我怀疑您添加的原因是由于./manage.py collectstatic 没有在您的js/app 目录中产生输出(这就是造成我困惑的原因)。在 settings.py 中解决这个问题

    PIPELINE_ENABLED = True  # pipeline > 1.3
    #PIPELINE = True  # pipeline < 1.3
    STATIC_ROOT = os.path.join(BASE_DIR, 'project/static')  # this should also be set
    

    运行

    ./manage.py collectstatic
    

    你应该会看到你生成的output_filename

    【讨论】:

      【解决方案2】:

      发生这种情况的另一个原因是,如果您在具有一个文件名的 source_filenames 元组中缺少一个逗号,这使其成为一个字符串:

      如果缺少逗号,('js/app/controllers.js') 是一个字符串并抛出 SuspiciousFileOperation

      PIPELINE_JS = {
          'check': {
              'source_filenames' : (
                  'js/app/controllers.js'
              ),
              'output_filename': 'js/app/check.js',
          },
      }
      

      固定:

      PIPELINE_JS = {
          'check': {
              'source_filenames' : (
                  'js/app/controllers.js',
              ),
              'output_filename': 'js/app/check.js',
          },
      }
      

      【讨论】:

        最近更新 更多