2013-04-21 84 views
1

我有一個多服務器設置。描繪一個客戶端,一個運行rails的web服務器和一個存儲數據的實例。我需要一種方法通過Web服務器從客戶端訪問數據存儲文件。通過scp的服務器文件

目前我正在使用scp將文件下載到臨時目錄中的Web服務器,然後將客戶端重定向到tmp url。

我更希望能夠通過網絡服務器流式傳輸文件而不用存儲它們。

有關如何做到這一點的任何建議?

回答

0

一種替代的方法是使用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,從你的shell

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

這使您可以將文件發送到標準輸出本地嘗試一下(它不能做通過scp。)


這允許您流式傳輸文件,但我不建議這樣做。

  1. 您正在將文件加載到Ruby中,這將不必要地膨脹您的過程。
  2. 失去X-SENDFILE的好處卸載你的軌道之外的下載過程
  3. 如果路徑中包含用戶提供的數據,您通過外殼注塑介紹自己(和服務器)傷的世界。