错误号::在控制器#上传EACCES轨在Ubuntu袋鼠carrierwave(Errno::EAC

2019-09-18 02:12发布

我使用袋鼠来分析我的轨道上的Ubuntu应用中的一些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'

在袋鼠的实际行抛出错误之前调用如下:@filename =文件名

在https://github.com/hmcgowan/roo/blob/master/lib/roo/excelx.rb

现在,同样的代码工作完全在开发我的Mac上。 服务器上运行是对开发Ubuntu的PUMA为好。 我已经检查权限和我有同样的我的Mac上。 我已经检查了用户拥有的文件夹是一样的运行服务器。

有任何想法吗? 我缺少的东西吗?

编辑:我也注意到在跟踪错误信息:

Permission denied - oo_2895_1872934321

2895彪马服务器上运行的PID。 而如果我通过了上传的文件,而不是#{} filex.store_path的实际路径的结果不会改变。

谢谢!

Answer 1:

是的! 我的假设是正确的?

我已经看过上: https://github.com/hmcgowan/roo/blob/master/lib/roo/excelx.rb找出处理Excel文件时,什么袋鼠一样。 所以这是我发现了什么:

def initialize(filename, packed=nil, file_warning = :error) #, create = false)
super()
@file_warning = file_warning
@tmpdir = "oo_"+$$.to_s
@tmpdir = File.join(ENV['ROO_TMP'], @tmpdir) if ENV['ROO_TMP'] 
unless File.exists?(@tmpdir)
  FileUtils::mkdir(@tmpdir)
end
filename = open_from_uri(filename) if filename[0,7] == "http://"
filename = unzip(filename) if packed and packed == :zip

@tmpdir调用ENV [ 'ROO_TMP']。 ROO_TMP在版本> 1.1.0袋鼠的介绍,这就是为什么它以前的工作。

在我的情况ENV [“ROO_TMP”]会返回零。

所以,我没有出口ROO_TMP = /无功/网络/ tmp目录来进行测试。 然后CHOWN -R用户名/无功/网络/ tmp中。

现在:

1.9.3p194 :001 > ENV['ROO_TMP']
=> "/var/www/tmp"

这使得一切正常,我能处理我的文件:

荣誉给我!



文章来源: Errno::EACCES in Controller#upload rails roo carrierwave on ubuntu