Python / django os.mkdir() сбой в подпапке OPENSHIFT_DATA_DIR

#python #django #openshift #permission-denied

#python #django #openshift #отказано в разрешении

Вопрос:

У меня есть код, который загружает предоставленные пользователем вложения в приложение django, размещенное на Openshift. Но код загрузки всегда завершается с ошибкой, показывая следующую трассировку стека :

 Traceback:
File "/var/lib/openshift/some_hash_value/python/virtenv/lib/python2.7/site-packages/Django-1.5.4-py2.7.egg/django/core/handlers/base.py" in get_response
  115.                         response = callback(request, *callback_args, **callback_kwargs)
File "/var/lib/openshift/some_hash_value/python/virtenv/lib/python2.7/site-packages/Django-1.5.4-py2.7.egg/django/contrib/auth/decorators.py" in _wrapped_view
  25.                 return view_func(request, *args, **kwargs)
File "/var/lib/openshift/some_hash_value/app-root/runtime/repo/wsgi/acubor/voucher/views.py" in save_vch
  267.     voucher = save_model(voucher, voucher_values)
File "/var/lib/openshift/some_hash_value/app-root/runtime/repo/wsgi/acubor/lib.py" in save_model
  108.     model.save()
File "/var/lib/openshift/some_hash_value/python/virtenv/lib/python2.7/site-packages/Django-1.5.4-py2.7.egg/django/db/models/base.py" in save
  546.                        force_update=force_update, update_fields=update_fields)
File "/var/lib/openshift/some_hash_value/python/virtenv/lib/python2.7/site-packages/Django-1.5.4-py2.7.egg/django/db/models/base.py" in save_base
  650.                 result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
File "/var/lib/openshift/some_hash_value/python/virtenv/lib/python2.7/site-packages/Django-1.5.4-py2.7.egg/django/db/models/manager.py" in _insert
  215.         return insert_query(self.model, objs, fields, **kwargs)
File "/var/lib/openshift/some_hash_value/python/virtenv/lib/python2.7/site-packages/Django-1.5.4-py2.7.egg/django/db/models/query.py" in insert_query
  1675.     return query.get_compiler(using=using).execute_sql(return_id)
File "/var/lib/openshift/some_hash_value/python/virtenv/lib/python2.7/site-packages/Django-1.5.4-py2.7.egg/django/db/models/sql/compiler.py" in execute_sql
  936.         for sql, params in self.as_sql():
File "/var/lib/openshift/some_hash_value/python/virtenv/lib/python2.7/site-packages/Django-1.5.4-py2.7.egg/django/db/models/sql/compiler.py" in as_sql
  894.                 for obj in self.query.objs
File "/var/lib/openshift/some_hash_value/python/virtenv/lib/python2.7/site-packages/Django-1.5.4-py2.7.egg/django/db/models/fields/files.py" in pre_save
  250.             file.save(file.name, file, save=False)
File "/var/lib/openshift/some_hash_value/python/virtenv/lib/python2.7/site-packages/Django-1.5.4-py2.7.egg/django/db/models/fields/files.py" in save
  86.         self.name = self.storage.save(name, content)
File "/var/lib/openshift/some_hash_value/python/virtenv/lib/python2.7/site-packages/Django-1.5.4-py2.7.egg/django/core/files/storage.py" in save
  48.         name = self._save(name, content)
File "/var/lib/openshift/some_hash_value/python/virtenv/lib/python2.7/site-packages/Django-1.5.4-py2.7.egg/django/core/files/storage.py" in _save
  171.                 os.makedirs(directory)
File "/var/lib/openshift/some_hash_value/python//virtenv/lib64/python2.7/os.py" in makedirs
  150.             makedirs(head, mode)
File "/var/lib/openshift/some_hash_value/python//virtenv/lib64/python2.7/os.py" in makedirs
  150.             makedirs(head, mode)
File "/var/lib/openshift/some_hash_value/python//virtenv/lib64/python2.7/os.py" in makedirs
  150.             makedirs(head, mode)
File "/var/lib/openshift/some_hash_value/python//virtenv/lib64/python2.7/os.py" in makedirs
  150.             makedirs(head, mode)
File "/var/lib/openshift/some_hash_value/python//virtenv/lib64/python2.7/os.py" in makedirs
  150.             makedirs(head, mode)
File "/var/lib/openshift/some_hash_value/python//virtenv/lib64/python2.7/os.py" in makedirs
  150.             makedirs(head, mode)
File "/var/lib/openshift/some_hash_value/python//virtenv/lib64/python2.7/os.py" in makedirs
  150.             makedirs(head, mode)
File "/var/lib/openshift/some_hash_value/python//virtenv/lib64/python2.7/os.py" in makedirs
  157.     mkdir(name, mode)
Exception Type: OSError at /voucher/journal/save/
Exception Value: [Errno 13] Permission denied: '/Users'
Request information:
GET: No GET data
  

И соответствующие настройки :

     MEDIA_ROOT = os.path.join(os.environ.get('OPENSHIFT_DATA_DIR'), 'user-uploads')
    MEDIA_URL = '/user-uploads/'
  

Есть предложения??

Комментарии:

1. вам необходимо изменить права доступа к папке

2. какой папке и какие разрешения я должен назначить?

3. у вас /Users есть папка?

4. @dhana OP использует Openshift, поэтому не беспокойтесь о разрешениях для папок

5. @abhayK Вам нужно создать каталог $OPENSHIFT_DATA_DIR/user-uploads . Для этого вам нужно создать перехват действия, последняя часть этого блога поможет: masci.wordpress.com/2012/07/17 /…