ruby - 在延迟的 sinatra 请求中使用 send_file

标签 ruby sinatra

我正在尝试在异步 sinatra 请求期间返回一个文件,如下所示:

aget "/test" do
  if(File.exists?("test.tar"))
    send_file("test.tar", :filename => "test.tar", :type => "application/octet-stream")
    return
  end

  EM.defer(proc{
      # create test.tar
    },
    proc{ |r|
      send_file("test.tar", :filename => "test.tar", :type => "application/octet-stream")
    })

然而,当我这样做时,似乎出现了错误:

wrong number of arguments (0 for 1)
file: file.rb
location: call
line: 29

回溯:

/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/file.rb in call
    def call(env)
/var/lib/gems/1.9.1/gems/async_sinatra-1.0.0/lib/sinatra/async.rb in block in body
    response.body = Array(async_handle_exception {response.body.call})
/var/lib/gems/1.9.1/gems/async_sinatra-1.0.0/lib/sinatra/async.rb in async_handle_exception
    yield
/var/lib/gems/1.9.1/gems/async_sinatra-1.0.0/lib/sinatra/async.rb in body
    response.body = Array(async_handle_exception {response.body.call})
/var/lib/gems/1.9.1/gems/sinatra-1.3.2/lib/sinatra/base.rb in invoke
    body(res.pop)
/var/lib/gems/1.9.1/gems/async_sinatra-1.0.0/lib/sinatra/async.rb in block in async_catch_execute
    invoke { halt h }
/var/lib/gems/1.9.1/gems/async_sinatra-1.0.0/lib/sinatra/async.rb in async_handle_exception
    yield
/var/lib/gems/1.9.1/gems/async_sinatra-1.0.0/lib/sinatra/async.rb in async_catch_execute
    async_handle_exception do
/var/lib/gems/1.9.1/gems/async_sinatra-1.0.0/lib/sinatra/async.rb in block in async_schedule
    native_async_schedule { async_catch_execute(&b) }
/var/lib/gems/1.9.1/gems/eventmachine-1.0.0.beta.4/lib/eventmachine.rb in call
    end.each { |j| j.call }
/var/lib/gems/1.9.1/gems/eventmachine-1.0.0.beta.4/lib/eventmachine.rb in block in run_deferred_callbacks
    end.each { |j| j.call }
/var/lib/gems/1.9.1/gems/eventmachine-1.0.0.beta.4/lib/eventmachine.rb in each
    @next_tick_mutex.synchronize do
/var/lib/gems/1.9.1/gems/eventmachine-1.0.0.beta.4/lib/eventmachine.rb in run_deferred_callbacks
    @next_tick_mutex.synchronize do
/var/lib/gems/1.9.1/gems/eventmachine-1.0.0.beta.4/lib/eventmachine.rb in run_machine
    run_machine
/var/lib/gems/1.9.1/gems/eventmachine-1.0.0.beta.4/lib/eventmachine.rb in run
    run_machine
/var/lib/gems/1.9.1/gems/thin-1.3.1/lib/thin/backends/base.rb in start
    EventMachine.run(&starter)
/var/lib/gems/1.9.1/gems/thin-1.3.1/lib/thin/server.rb in start
    @backend.start
/var/lib/gems/1.9.1/gems/rack-1.4.1/lib/rack/handler/thin.rb in run
    server.start
/var/lib/gems/1.9.1/gems/sinatra-1.3.2/lib/sinatra/base.rb in run!
    handler.run self, :Host => bind, :Port => port do |server|
/var/lib/gems/1.9.1/gems/sinatra-1.3.2/lib/sinatra/main.rb in block in <module:Sinatra>
    at_exit { Application.run! if $!.nil? && Application.run? }


end

最佳答案

您收到的错误是因为您使用的函数需要 1 个参数,而您没有提供任何参数。如果您可以向我们展示第 29 行附近的代码,我或其他人可以为您指出。

关于ruby - 在延迟的 sinatra 请求中使用 send_file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12224331/

相关文章:

ruby - 找不到 PTY gem

ruby-on-rails - 这是如何发送到 Show 操作的

ruby-on-rails - 设计自定义登录表单

ruby-on-rails - Rails 在不重启服务器的情况下加载类更改

mysql - 如何使用 Sinatra 和 Datamapper 将数组从表单传递到数据库?

ruby - 从用户提交的文本中提取关键字的好方法是什么?

ruby - Net::HTTP 请求中的参数数量错误

ruby - 如何在 HTTParty 中设置端口

ruby - 在 Heroku 上安装二进制文件,特别是 FontCustom

ruby - 在独立的 Sinatra 应用程序中将 Padrino Controller 文件放在哪里?