2013-10-19 48 views
0

Ruby 2.0,Rails 4. 我做了一個提供靜態文件的站點。 我用使用rails列出webdirectory的文件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

一個紅寶石的一大優勢是,它依賴於短短的幾個基本的東西,以實現不同的功能。其中一個極端的事情就是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 
+0

哇,這很酷。非常感謝您對像我這樣的noobs的耐心:)感謝像你這樣的人,編程變得越來越有趣! – ksu