2

私の開発環境では、コードベースは samba マウントを使用して ubuntu-server VM にマウントされ、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 VM 内のどこかに直接シンボリック リンクを作成すると、問題なく動作します。

4

2 に答える 2

0

エラーはchown呼び出しで発生しているように見えるため、ファイルがchownされている/からchownされているユーザーには、マウントに対する書き込み権限がないと推測しています。VM 上のユーザーが他のシステムで認識されていない可能性があるため、chown が発生すると、それは無効になります。

パスから /foo/ を削除するときにファイルが書き込まれる (chown される) ことをユーザーに確認し、そのユーザーとして /foo/some/file/path/ ディレクトリにファイルを書き込めるかどうかを確認します。

于 2009-11-01T03:17:03.100 に答える
0

fileutils.rb の copy_metadata メソッドで、rescue ブロックを次のように変更する必要があります。

rescue Errno::EPERM

に:

rescue Errno::EPERM, Errno::EACCES

または、さらに徹底的に:

rescue

errno コードをキャッチするようにします。

于 2013-02-14T17:23:07.700 に答える