Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Errno::控制器中的EACCES#上传ubuntu上的rails roo carrierwave_Ubuntu_Carrierwave - Fatal编程技术网

Errno::控制器中的EACCES#上传ubuntu上的rails roo carrierwave

Errno::控制器中的EACCES#上传ubuntu上的rails roo carrierwave,ubuntu,carrierwave,Ubuntu,Carrierwave,我正在使用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 pirame

我正在使用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=文件名

现在,相同的代码在我的mac上的dev上完美地工作。运行的服务器也是开发者ubuntu上的puma。 我已经检查了权限,并且在我的mac上也有相同的权限。我已检查拥有文件夹的用户是否与运行服务器的用户相同

有什么想法吗?我错过什么了吗

编辑:我还注意到跟踪中的错误消息:

Permission denied - oo_2895_1872934321
2895是正在运行的Puma服务器的PID。如果我传递上传文件的实际路径而不是#{filex.store_path},结果不会改变


谢谢

是的!我的假设是正确的

我已经看过了:了解roo在处理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是在ROO的版本>1.1.0中引入的,这就是它以前工作的原因

在我的例子中,ENV['ROO_TMP']将返回nil

所以我确实导出了ROO_TMP=/var/www/TMP来进行测试。然后是chown-R username/var/www/tmp

现在:

1.9.3p194 :001 > ENV['ROO_TMP']
=> "/var/www/tmp"
这使得一切正常,我能够处理我的文件:)


我很荣幸

是的!我的假设是正确的

我已经看过了:了解roo在处理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是在ROO的版本>1.1.0中引入的,这就是它以前工作的原因

在我的例子中,ENV['ROO_TMP']将返回nil

所以我确实导出了ROO_TMP=/var/www/TMP来进行测试。然后是chown-R username/var/www/tmp

现在:

1.9.3p194 :001 > ENV['ROO_TMP']
=> "/var/www/tmp"
这使得一切正常,我能够处理我的文件:)


我很荣幸

我想我已经得到了这个问题的答案:来自:这个gem的临时文件存储在目录中,目录名为“oo_u”和一个数字(当前进程的PID)。这些目录是在当前工作目录中创建的。如果要为临时文件使用不同的目录,请设置环境变量ROO_TMP!(例如,.bashrc文件中的“export ROO_TMP=/TMP”)。ROO_TMP是在版本>1.1.0中引入的。我想我已经得到了答案:这个gem的临时文件存储在以“oo_”和数字命名的目录中(当前进程的PID)。这些目录是在当前工作目录中创建的。如果要为临时文件使用不同的目录,请设置环境变量ROO_TMP!(例如,.bashrc文件中的“export ROO_TMP=/TMP”)。ROO_TMP是在版本>1.1.0中引入的。您也可以接受自己的答案,将每个人的概览列表中的问题设置为“已回答”。抱歉,我不知道该限制。您也可以接受自己的答案,将每个人的概览列表中的问题设置为“已回答”。抱歉,我不知道该限制。