Ruby无法将哈希转换为Int

Ruby无法将哈希转换为Int,ruby,Ruby,我有一个ruby bash脚本来下载一个zip文件,并向标准输出一个进度条。我有以下几点 # Temp file name tmp = ActiveSupport::SecureRandom.hex(8) file = temp_dl_dir+tmp+'.zip' print file.inspect # Download progress_bar = nil open(file, 'w', :content_length_proc => lambda { |length| if

我有一个ruby bash脚本来下载一个zip文件,并向标准输出一个进度条。我有以下几点

# Temp file name
tmp = ActiveSupport::SecureRandom.hex(8)
file = temp_dl_dir+tmp+'.zip'

print file.inspect

# Download
progress_bar = nil
open(file, 'w', :content_length_proc => lambda { |length|
  if length && 0 < length
    progress_bar = ProgressBar.new('...', length)
    progress_bar.file_transfer_mode
  end 
},
:progress_proc => lambda { |progress|
  progress_bar.set(progress) if progress_bar
}) do |fo|
    fo.print open(dl).read
end
这意味着我的
open(文件'w'…
函数有问题


我想不出哪里出了问题+\u+

:content\u length\u proc
似乎与
OpenURI::OpenRead#open
有关(通过
ri open
检查,然后搜索
:content\u length\u proc

我的
ri
关于此方法的文档说明:

但是,
mode
必须是读取模式,因为
OpenURI::OpenRead#open
不支持 写入模式(尚未)。也会忽略
perm
,因为它仅对文件有意义 创造


因此,您不能将
OpenURI::OpenRead#open
'w'
模式一起使用。如果这是您的实际目标,您必须使用不同的机制写入URL。(你的英文描述说你正试图下载一个文件,但你不会使用
'w'
模式来下载
OpenURI::OpenRead#open
方法,在这种情况下…

:content _length_proc
似乎与
OpenURI::OpenRead#open
有关。(通过
ri open
检查,然后搜索
:content\u length\u proc

我的
ri
关于此方法的文档说明:

但是,
mode
必须是读取模式,因为
OpenURI::OpenRead#open
不支持 写入模式(尚未)。也会忽略
perm
,因为它仅对文件有意义 创造


因此,您不能将
OpenURI::OpenRead#open
'w'
模式一起使用。如果这是您的实际目标,您必须使用不同的机制写入URL。(你的英文描述说你正试图下载一个文件,但你不会使用
'w'
模式来下载
OpenURI::OpenRead#open
方法,在这种情况下…

我正要问同样的问题。堆栈跟踪抱怨的是哪一行?第191行是open(文件,'w',…)一行…第32行是
def is_dir?(目录)
噢,我想知道open中的第三个参数是否有问题?open中的第三个参数是“:content\u length\u proc=>lambda…”这是一个散列。堆栈跟踪讨论的是open-uri.rb:32。因此,对open的调用可能期望第三个参数是Int.is_dir?与此无关,32是open-uri.rb第32行,您希望我发布open-uri.rb gem代码吗?如果您愿意,我可以这样做,但我没有编写它。问题是第191行,这是open行(文件“w”line@NiklasB.:堆栈跟踪提到的错误不在他的文件中。它在open-uri.rb中,这是一个用于在uri处打开文件的ruby库。我正要问同样的问题。堆栈跟踪抱怨的是哪一行?第191行是打开的(文件,'w',…)一行…第32行是
def is_dir?(目录)
噢,我想知道问题是否出在open中的第三个参数上?open中的第三个参数是“:content\u length\u proc=>lambda…”这是一个散列。堆栈跟踪讨论的是open-uri.rb:32。因此,对open的调用可能期望第三个参数是Int.is_dir?与此无关,32是open-uri.rb第32行,您希望我发布open-uri.rb gem代码吗?如果您愿意,我可以这样做,但我没有编写它。问题是第191行,这是open行(文件“w”line@NiklasB.:堆栈跟踪提到的错误不在他的文件中。它位于open-uri.rb中,这是一个用于以uri打开文件的ruby库。
open-uri.rb:32:in `initialize': can't convert Hash into Integer (TypeError)
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:32:in `open_uri_original_open'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:32:in `open'
    from ./site.rb:191 (line 191 is the open(file, 'w' ...) one)