使用rails 4列出webdirectory的文件

时间:2013-10-19 15:32:30

标签: ruby-on-rails-4 net-ssh

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)

1 个答案:

答案 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。它关心hostuser,可选择关于密码,但最好使用基于密钥的身份验证。

因此,如果您查看the net/ssh example,您将看到必须传递主机而不是URL。在您的示例中,这将转换为以下内容:

require 'net/ssh'

Net::SSH.start('www.domain.ch', 'gast') do |ssh|
  ssh.exec!('ls path/to/directory')
end
相关问题