ubuntuのレールアプリでrooを使用していくつかのexcelxファイルを解析しています。これらは Carrierwave でアップロードされます。
これが私の実際のコントローラーラインです:
excelx_file = params[:excel_file]
filex = MetadataUploader.new
filex.store!(excelx_file)
workbook = Excelx.new("#{filex.store_path}")
public/uploads のパーミッションは次のとおりです。
drwxrwxr-x 2 pirames pirames 4096 Jun 13 14:03 metadata_ingestion
drwxrwxr-x 2 pirames pirames 4096 Jun 13 14:24 tmp
ファイルのアクセス許可は次のとおりです。
ls -l public/uploads/metadata_ingestion/
total 608
-rw-r--r-- 1 pirames pirames 621504 Jun 13 14:24 Bozza_Pirames_Distribuito.xlsx
代わりに、実際のトレースを次に示します。
Errno::EACCES in IngestionController#upload
Permission denied - oo_2895_1872934321
Rails.root: /var/www/mascarino
Application Trace | Framework Trace | Full Trace
/home/pirames/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/fileutils.rb:247:in `mkdir'
/home/pirames/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/fileutils.rb:247:in `fu_mkdir'
/home/pirames/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/fileutils.rb:176:in `block in mkdir'
/home/pirames/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/fileutils.rb:175:in `each'
/home/pirames/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/fileutils.rb:175:in `mkdir'
roo (1.10.1) lib/roo/excelx.rb:95:in `initialize'
app/controllers/ingestion_controller.rb:24:in `new'
app/controllers/ingestion_controller.rb:24:in `upload'
actionpack (3.2.3) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (3.2.3) lib/abstract_controller/base.rb:167:in `process_action'
actionpack (3.2.3) lib/action_controller/metal/rendering.rb:10:in `process_action'
エラーをスローする前に呼び出される roo の実際の行は次のとおりです。
https://github.com/hmcgowan/roo/blob/master/lib/roo/excelx.rbで
これで、Mac の dev でも同じコードが完全に機能するようになりました。実行中のサーバーは、dev の ubuntu でも puma です。アクセス許可を確認しましたが、Mac でも同じです。フォルダーを所有しているユーザーがサーバーを実行しているユーザーと同じであることを確認しました。
何か案は?何か不足していますか?
編集:トレースのエラーメッセージにも気付きました:
Permission denied - oo_2895_1872934321
2895 は、実行中の Puma サーバーの PID です。#{filex.store_path} の代わりにアップロードされたファイルの実際のパスを渡しても、結果は変わりません。
ありがとう!