2

マルチサーバーのセットアップがあります。クライアント、Rails を実行する Web サーバー、およびデータを格納するインスタンスを想像してみてください。Web サーバーを介してクライアントからデータ ストア ファイルにアクセスする方法が必要です。

現在、scp を使用して一時ディレクトリ内の Web サーバーにファイルをダウンロードし、クライアントを tmp URL にリダイレクトしています。

ファイルを保存せずに、Web サーバーを介してファイルをストリーミングできるようにしたいと考えています。

これを行う方法について何か提案はありますか?

4

1 に答える 1

1

別の方法の 1 つは、sshfs を使用してリモート サーバーをマウントすることです (読み取り専用)。

sshfs -o ro server:/path/to/files path/on/webserver/to/mount

http://www.howtogeek.com/howto/ubuntu/how-to-mount-a-remote-folder-using-ssh-on-ubuntu/


あなたの質問によるストリーミングに関して:

次のようなことができます。

data = `ssh server 'cat path/to/file/on/server'`
send_data(data)

http://apidock.com/rails/ActionController/Streaming/send_data


ここでの秘訣は、scp の代わりに ssh を使用することです。シェルから試してみてください。

ssh server 'cat path/to/file' > local_file

これにより、ファイルをローカルで STDOUT に送信できます (scp 経由では送信できません)。


これにより、ファイルをストリーミングできますが、これを行うことはお勧めしません。

  1. ファイルをRubyにロードしているため、プロセスが不必要に肥大化します。
  2. Railsプロセスの外部でダウンロードをオフロードするX-Sendfileの利点を失います
  3. パスにユーザー提供のデータが含まれている場合は、シェル インジェクションによって自分自身 (およびサーバー) を傷の世界に連れて行きます。
于 2013-04-21T18:49:03.577 に答える