Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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
Ruby EOFError:使用ftp.connect到达文件结尾_Ruby_Heroku_Ftp - Fatal编程技术网

Ruby EOFError:使用ftp.connect到达文件结尾

Ruby EOFError:使用ftp.connect到达文件结尾,ruby,heroku,ftp,Ruby,Heroku,Ftp,我进行了一次很好的搜索,发现了一些类似的问题,但没有任何相似之处足以让任何事情都起作用 设置 我正在使用Heroku运行一个Ruby(off-Rails)脚本,该脚本基本上从API获取数据来填充电子商务首页(对于日本的乐天商店),在代码中穿插横幅和评论,然后将HTML文件放到电子商务服务的FTP服务器上 代码 因为我一整天都在尝试解决这个问题,所以我硬编码了这个脚本,使它更容易一步一步地粘贴到IRB中。看起来是这样的: require 'uri' require 'net/ftp' uri =

我进行了一次很好的搜索,发现了一些类似的问题,但没有任何相似之处足以让任何事情都起作用

设置

我正在使用Heroku运行一个Ruby(off-Rails)脚本,该脚本基本上从API获取数据来填充电子商务首页(对于日本的乐天商店),在代码中穿插横幅和评论,然后将HTML文件放到电子商务服务的FTP服务器上

代码

因为我一整天都在尝试解决这个问题,所以我硬编码了这个脚本,使它更容易一步一步地粘贴到IRB中。看起来是这样的:

require 'uri'
require 'net/ftp'

uri = URI.parse('ftp://username:password@ftp.rakuten.ne.jp:16910')

ftp = Net::FTP.new

ftp.debug_mode = true
ftp.passive = true

ftp.connect(uri.host, uri.port) # ERROR OCCURS HERE
ftp.login(uri.user, uri.password)
ftp.putbinaryfile('./output/index.html')
ftp.close
正如您所看到的,这是一个非常简单的代码。我已尝试手动进入主机和端口,但结果没有变化。(虽然我发誓我让它工作了,但我一直无法复制结果。)它在我的Cloud9IDE上本地工作,但在Heroku上不工作

问题

输入ftp.connect命令后,我得到一个错误。以下是完整的IRB运行过程,使用硬编码的主机和端口重新创建错误(并确认通过Cloud9 IDE工作):

irb(main):001:0>需要“uri”
=>正确
irb(主):002:0>要求“网络/ftp”
=>正确
irb(主):003:0>ftp=Net::ftp.new
=> #    
irb(主):004:0>ftp.debug_mode=true
=>正确
irb(主):005:0>ftp.passive=true
=>正确
irb(main):006:0>ftp.connect(“ftp.rakuten.ne.jp”,“16910”)
连接:ftp.rakuten.ne.jp,16910
EOFError:已到达文件结尾
from/app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/ftp.rb:1310:in'readline'
from/app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/ftp.rb:305:in'getline'
from/app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/ftp.rb:317:in'getmultiline'
from/app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/ftp.rb:334:in'getresp'
from/app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/ftp.rb:354:in'voidresp'
from/app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/ftp.rb:264:in'block in connect'
from/app/vendor/ruby-2.3.0/lib/ruby/2.3.0/monitor.rb:214:in'mon_synchronize'
from/app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/ftp.rb:262:in'connect'
来自(irb):6
from/app/bin/irb:15:in`'
附录

如果你能给我任何帮助,我将不胜感激。我对Ruby比较陌生,对Heroku也非常陌生,但我真的很想让它发挥作用

如果在Heroku上不可能,有人能推荐另一个选项来按预期部署脚本吗


补充:好的,所以代码有时确实在Heroku上按预期工作。我今天早上刚通过IRB试过,连接成功了。计划的运行也起到了作用,但在那之后,我尝试在代码顶部使用检索到的邮件附件数据修复一个单独的问题,FTP连接再次开始失败,并出现相同的错误。但是,它仍然可以在本地工作。

我无法通过普通ftp客户端在正常端口或
16910
上连接到服务器
ftp.rakuten.ne.jp。我要说的是,服务器要么配置错误,要么不允许来自未知IP地址的连接。无论如何,你的Ruby代码看起来不错,这很奇怪。我从未遇到过从各种计算机或Cloud9连接的问题。它可能是一个地理区域块吗?我在日本,Cloud9似乎在亚洲某处有服务器。。。也许乐天的ftp服务器正在阻止来自日本以外的连接?这是可能的。我刚刚再试了一次(来自荷兰),我可以连接,但TCP连接立即关闭。。。显然是服务器端的问题。到底是什么?我只能猜测。。。通常防火墙会直接阻止连接,而不是先打开连接,然后立即关闭连接,不过…谢谢您的尝试。我正在尝试使用类似于Heroku的日本PaaS。等我把所有的东西都弄好了,我会回来检查的!
irb(main):001:0> require 'uri'
=> true    
irb(main):002:0> require 'net/ftp'
=> true    
irb(main):003:0> ftp = Net::FTP.new
=> #<Net::FTP:0x007f65e242c850 @mon_owner=nil, @mon_count=0, @mon_mutex=#<Thread::Mutex:0x007f65e242c7b0>, @binary=true, @passive=true, @debug_mode=false, @resume=false, @sock=#<Net::FTP::NullSocket:0x007f65e242c788>, @logged_in=false, @open_timeout=nil, @read_timeout=60>    
irb(main):004:0> ftp.debug_mode = true
=> true
irb(main):005:0> ftp.passive = true
=> true    
irb(main):006:0> ftp.connect("ftp.rakuten.ne.jp", "16910")
connect: ftp.rakuten.ne.jp, 16910
EOFError: end of file reached    
        from /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/ftp.rb:1310:in `readline'    
        from /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/ftp.rb:305:in `getline'    
        from /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/ftp.rb:317:in `getmultiline'    
        from /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/ftp.rb:334:in `getresp'
        from /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/ftp.rb:354:in `voidresp'    
        from /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/ftp.rb:264:in `block in connect'    
        from /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize'    
        from /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/ftp.rb:262:in `connect'    
        from (irb):6    
        from /app/bin/irb:15:in `<main>'