2014-10-05 62 views
3

我使用Django的管道资产缩小和压缩,但似乎当我尝试运行是一个错误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 

回答

3

来自source_filenamesoutput_filename

我怀疑你补充说,是因为./manage.py collectstaticjs/app目录未产生输出的原因,卸下

STATIC_PATH + 

(那是什么引起我的困惑)。为了解决这个问题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

1

另一个原因这可能发生的情况是,如果你错过了在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', 
    }, 
}