ruby-on-rails - 使用 Rails 在公共(public)文件夹中本地提供 1GB 文件

标签 ruby-on-rails ruby

我有一个名为large.zip(约1GB)的大文件存储在公共(public)文件夹中。每当我尝试从本地主机 (localhost:3000/large.zip) 下载它时,我都会收到以下错误消息

[2013-08-24 22:22:28] ERROR NoMemoryError: failed to allocate memory
        E:/RubyStack/ruby/lib/ruby/gems/1.9.1/gems/rack-1.4.5/lib/rack/handler/w
ebrick.rb:72:in `block in service'
        E:/RubyStack/ruby/lib/ruby/gems/1.9.1/gems/rack-1.4.5/lib/rack/file.rb:1
25:in `block in each'
        E:/RubyStack/ruby/lib/ruby/gems/1.9.1/gems/rack-1.4.5/lib/rack/file.rb:1
17:in `open'
        E:/RubyStack/ruby/lib/ruby/gems/1.9.1/gems/rack-1.4.5/lib/rack/file.rb:1
17:in `each'
        E:/RubyStack/ruby/lib/ruby/gems/1.9.1/gems/rack-1.4.5/lib/rack/handler/w
ebrick.rb:71:in `service'
        E:/RubyStack/ruby/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
        E:/RubyStack/ruby/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
        E:/RubyStack/ruby/lib/ruby/1.9.1/webrick/server.rb:191:in `block in star
t_thread'

下载到 43619924 字节(约 400MB)时停止。我的电脑是 8GB RAM,我使用 ruby​​ 1.9.3、rails 3.2.14 和 webbrick 作为网络服务器。我认为分配内存的大小有一些限制(400MB?)。那么有没有办法提高这个限制呢?或者如何解决这个问题?

编辑:我只是使用rails new 创建一个rails 应用程序,然后将large.zip 文件复制到公共(public)文件夹中。然后我在 Chrome 上打开链接 localhost:3000/large.zip 来下载它(再次)。

最佳答案

不要尝试直接通过 Rails 传输大文件,尤其是使用 WEBrick 作为服务器时。相反,使用 #send_file使用 Apache 或 Nginx 等 Web 服务器支持X-Sendfile。这使得 Web 服务器能够直接传输文件,而不会在 Rails 进程中消耗大量内存。

关于ruby-on-rails - 使用 Rails 在公共(public)文件夹中本地提供 1GB 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18420265/

相关文章:

ruby-on-rails - 使用 RubyMine 接收错误

ruby-on-rails - 您如何获得 Active Record 中子查询的计数?

ruby-on-rails - 运行迁移时出现重复列名错误

ruby-on-rails - 加载常量时自动加载常量时检测到循环依赖

ruby-on-rails - 如何在RoR 中限制用户访问页面?

javascript - 如何使用 AJAX 将 JS 变量传递给 Controller ​​?

ruby-on-rails - 只是无法让 redmine 工作

c - Ruby 中的有符号和无符号整数

python - 在不离开僵尸进程的情况下启动进程并从 Ruby on Rails 应用程序中将其终止

ruby - optionparser 将数组传递给 ruby​​ 文件