我正在使用 roo 在 ubuntu 上的 rails 应用程序上解析一些 excelx 文件。这些是通过 Carrierwave 上传的。
这是我实际的控制器线:
excelx_file = params[:excel_file]
filex = MetadataUploader.new
filex.store!(excelx_file)
workbook = Excelx.new("#{filex.store_path}")
以下是公开/上传的权限:
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 上的实际行如下:@filename = filename
在https://github.com/hmcgowan/roo/blob/master/lib/roo/excelx.rb
现在,相同的代码在我的 mac 上的 dev 上完美运行。运行的服务器也是 ubuntu 上的 puma 在 dev 上。我已经检查了权限,并且在我的 mac 上也有相同的权限。我已检查拥有该文件夹的用户是否与运行服务器的用户相同。
有任何想法吗?我错过了什么吗?
编辑:我还在跟踪中的错误消息中注意到:
Permission denied - oo_2895_1872934321
2895 是正在运行的 Puma 服务器的 PID。如果我传递上传文件的实际路径而不是 #{filex.store_path} 结果不会改变。
谢谢!