0

Ruby 2.0、Rails 4。静的ファイルを提供するサイトを作成しました。使った

 Dir.glob 

静的ファイルを一覧表示するには Heroku のスラッグサイズが大きすぎるため、アプリの外部にファイルを保存する必要があります。

このため、パブリック 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 というファイルは聞いたことがありません

このスレッドの「初期化」に関する回答: そのようなファイルやディレクトリはありません - getaddrinfo (Errno::ENOENT) は、Rails の新しいアプリ(rvm の更新) で問題が解決しなかった場合です。

追加情報:

$gem -v bundler
2.0.5
$rvm - v
rvm 1.21.12 (stable)

$rvm - v
rvm 1.23.9 (master)
4

1 に答える 1

1

Ruby の大きな利点の 1 つは、いくつかの基本的なものだけに依存してさまざまな機能を実装できることです。これが極端になったものの 1 つが IO です。UNIX の原則「すべてはファイルである」から借用したもので、Ruby では「すべては IO」です。

したがって、このエラーErrno::ENOENT - No such file or directory - getaddrinfo:は単なる一般的な IO エラーであり、アドレスhttp://www.domain.ch/path/to/directoryが見つからなかったことを示しています。コードに行番号を指定すると、投稿したスタック トレースに 1 対 1 でマップされるため、このエラーを見つけやすくなります。

私が SSH について知っていることから、SSH は URL を気にしません。hostと、オプションでパスワードを気にuserしますが、キーベースの認証を使用することをお勧めします。

したがって、net/ssh の例を見ると、URL ではなくホストを渡す必要があることがわかります。あなたの例では、これは次のように変換されます。

require 'net/ssh'

Net::SSH.start('www.domain.ch', 'gast') do |ssh|
  ssh.exec!('ls path/to/directory')
end
于 2013-10-20T14:47:31.680 に答える