Скрепка выдает ошибку «Отказано в доступе» при монтировании samba

В моей среде разработки кодовая база монтируется на виртуальной машине Ubuntu-сервера с помощью монтирования samba, она монтируется как root, и я запускаю mongrel как root.

Когда я пытаюсь загрузить файл с помощью Paperclip, файл сохраняется нормально, но затем возникают проблемы с созданием разных стилей.

Я получаю следующую ошибку:

Errno::EACCES (Permission denied - /foo/some/file/path/file-name-style.jpg):
  /usr/lib/ruby/1.8/fileutils.rb:1272:in `chown'
  /usr/lib/ruby/1.8/fileutils.rb:1272:in `copy_metadata'
  /usr/lib/ruby/1.8/fileutils.rb:452:in `copy_entry'
  /usr/lib/ruby/1.8/fileutils.rb:1324:in `traverse'
  /usr/lib/ruby/1.8/fileutils.rb:448:in `copy_entry'
  /usr/lib/ruby/1.8/fileutils.rb:507:in `mv'
  /usr/lib/ruby/1.8/fileutils.rb:1395:in `fu_each_src_dest'
  /usr/lib/ruby/1.8/fileutils.rb:1411:in `fu_each_src_dest0'
  /usr/lib/ruby/1.8/fileutils.rb:1393:in `fu_each_src_dest'
  /usr/lib/ruby/1.8/fileutils.rb:494:in `mv'
  vendor/gems/thoughtbot-paperclip-2.3.0/lib/paperclip/storage.rb:43:in `flush_writes'
  vendor/gems/thoughtbot-paperclip-2.3.0/lib/paperclip/storage.rb:39:in `each'
  vendor/gems/thoughtbot-paperclip-2.3.0/lib/paperclip/storage.rb:39:in `flush_writes'
  vendor/gems/thoughtbot-paperclip-2.3.0/lib/paperclip/attachment.rb:142:in `save'
  vendor/gems/thoughtbot-paperclip-2.3.0/lib/paperclip.rb:331:in `send'
  vendor/gems/thoughtbot-paperclip-2.3.0/lib/paperclip.rb:331:in `save_attached_files'
  vendor/gems/thoughtbot-paperclip-2.3.0/lib/paperclip.rb:324:in `each_attachment'
  vendor/gems/thoughtbot-paperclip-2.3.0/lib/paperclip.rb:323:in `each'
  vendor/gems/thoughtbot-paperclip-2.3.0/lib/paperclip.rb:323:in `each_attachment'
  vendor/gems/thoughtbot-paperclip-2.3.0/lib/paperclip.rb:330:in `save_attached_files'

Однако он отлично работает, если я удалю /foo/ из структуры папок смонтированного кода и вместо этого сделаю символическую ссылку где-то непосредственно внутри виртуальной машины Ubuntu.


person DEfusion    schedule 14.10.2009    source источник


Ответы (2)


Поскольку ошибка, похоже, происходит при вызове chown, я предполагаю, что пользователь, которому и от которого передается файл, не имеет прав на запись на монтирование. Возможно, пользователь на виртуальной машине не известен в другой системе, поэтому, когда происходит chown, он выходит из строя.

Проверьте пользователя, под которым записан файл (chown'd to), когда вы удаляете /foo/ из пути, а затем посмотрите, можете ли вы записать файл в каталог /foo/some/file/path/ от имени этого пользователя.

person adamaig    schedule 01.11.2009

В fileutils.rb в методе copy_metadata блок восстановления должен быть изменен с:

rescue Errno::EPERM

to:

rescue Errno::EPERM, Errno::EACCES

или, может быть, даже более тщательно:

rescue

чтобы он ловил любой код ошибки.

person Jared    schedule 14.02.2013