2014-10-05 59 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', 
    }, 
}