Ruby 2.0,Rails 4。 我创建了一个提供静态文件的站点。 我用了
Dir.glob
列出静态文件 现在我必须将文件保存在应用程序之外,因为Heroku中的slugsize会太大,否则
出于这个原因,我想要一个公共Web文件夹的目录列表。 (由apache服务器提供)
我试过了: 的Gemfile:
gem 'net-ssh'
控制器:
def index
require 'net/ssh'
ssh = Net::SSH.start( 'http://www.domain.ch/path/to/directory', 'gast')
@files =ssh.exec!( 'ls . ').split("\n")
ssh.close
end
这引发了错误:
Errno::ENOENT - No such file or directory - getaddrinfo:
net-ssh (2.7.0) lib/net/ssh/transport/session.rb:67:in `block in initialize'
/home/benutzer/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/timeout.rb:52:in `timeout'
/home/benutzer/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/timeout.rb:97:in `timeout'
net-ssh (2.7.0) lib/net/ssh/transport/session.rb:67:in `initialize'
net-ssh (2.7.0) lib/net/ssh.rb:200:in `start'
...
我从未听说过名为getaddrinfo的文件
这个帖子`initialize': No such file or directory - getaddrinfo (Errno::ENOENT) when Rails new app(更新rvm)的答案并没有解决问题。
其他信息:
$gem -v bundler
2.0.5
$rvm - v
rvm 1.21.12 (stable)
$rvm - v
rvm 1.23.9 (master)
答案 0 :(得分:1)
Ruby的一大优势是,它只依赖于几个基本的东西来实现不同的功能。其中一个极端的事情就是IO。借用UNIX原则“一切都是文件”,在Ruby中“一切都是IO”。
因此错误Errno::ENOENT - No such file or directory - getaddrinfo:
只是一个通用IO错误,告诉您无法找到地址http://www.domain.ch/path/to/directory
。如果您在代码中提供了行号,则会更容易发现此错误,因为它们将1到1映射到您发布的堆栈跟踪。
根据我对SSH的了解,它并不关心URL。它关心host
和user
,可选择关于密码,但最好使用基于密钥的身份验证。
因此,如果您查看the net/ssh example,您将看到必须传递主机而不是URL。在您的示例中,这将转换为以下内容:
require 'net/ssh'
Net::SSH.start('www.domain.ch', 'gast') do |ssh|
ssh.exec!('ls path/to/directory')
end