ruby-on-rails - 服务器文件通过 scp

标签 ruby-on-rails ruby

我有一个多服务器设置。设想一个客户端、一个运行 Rails 的 Web 服务器和一个存储数据的实例。我需要一种通过网络服务器从客户端访问数据存储文件的方法。

目前我正在使用 scp 将文件下载到临时目录中的网络服务器,然后将客户端重定向到 tmp url。

我更希望能够通过网络服务器流式传输文件而不存储它们。

关于如何做到这一点有什么建议吗?

最佳答案

另一种方法是使用 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


这里的技巧是使用 ssh 而不是 scp,在你的 shell 中尝试一下

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

这允许您将文件发送到本地 STDOUT(不能通过 scp 完成。)


这允许您流式传输文件,但我不建议这样做。

  1. 您正在将文件加载到 Ruby 中,这会不必要地使您的进程膨胀。
  2. 您失去了 X-Sendfile 将下载卸载到 rails 进程之外的好处
  3. 如果路径包含用户提供的数据,则您将自己(和服务器)介绍给一个通过 shell 注入(inject)造成伤害的世界。

关于ruby-on-rails - 服务器文件通过 scp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16134776/

相关文章:

ruby-on-rails - 登录 Postgresql 时角色不存在错误

ruby-on-rails - 在 ruby​​ 中构造字符串

ruby - 有没有办法通过 dashing 将数据传递给作业?

ruby-on-rails - web.1 | bundler : command not found: puma

ruby - 如何反转散列,维护重复键

ruby-on-rails - 在表单中将 bootstrap-datepicker-rails 添加到 date_select

ruby-on-rails - CloudFlare SSL + Heroku 自定义域不起作用

ruby-on-rails - rails 3 : fields_for showing blank filed on Edit view

ruby-on-rails - 空哈希参数的 Rails 3 到 4 错​​误数量的参数错误

ruby-on-rails - 如果条件的 ERB 与 HAML 转换?