在控制器中写入公共文件;远程访问挂起,直到操作完成

时间:2014-07-30 22:10:43

标签: ruby-on-rails file-io controller actioncontroller

实施控制器操作时,如下所示:

def create_file
    File.open('public/test.txt', "w+") do |f|
        f.write('test')
    end
    sleep(60)
    head :no_content
end

操作完成后,可以访问文件 /test.txt;但是,在操作返回之前(例如在sleep()调用期间)访问此URL的任何尝试似乎都会挂起,直到完成为止。

我有一些用例,我想根据用户输入创建可公开访问的文件,调用需要将URL传递给这样一个文件的第三方API(在这种情况下没有选项来发送数据) ,然后在操作完成之前删除该文件。不幸的是,这似乎是不可能的,因为在动作完成之前文件实际上是不可访问的。

在Rails中是否存在某种方式,某种类型的刷新呼叫或路由刷新或处理更接近?我不确定为什么它甚至挂在这种情况下。或者我将不得不使用单独的操作来创建和处理文件(假设我不想将它存储在同一服务器上的静态非Rails站点上)?

1 个答案:

答案 0 :(得分:2)

似乎问题是,正如评论所示,只有一个线程可用于在开发模式下提供请求。解决方法是添加config.threadsafe! to config \ environments \ development.rb并使用--threaded选项启动thin。

相关问题