Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails OpenURI::open with Rails无法从localhost加载JSON_Ruby On Rails_Ruby_Open Uri - Fatal编程技术网

Ruby on rails OpenURI::open with Rails无法从localhost加载JSON

Ruby on rails OpenURI::open with Rails无法从localhost加载JSON,ruby-on-rails,ruby,open-uri,Ruby On Rails,Ruby,Open Uri,我有这样明显的控制器代码: require "json" require "open-uri" class FoobarController < ApplicationController def get render json: { foo: 1, bar: 2 } end def output data = open("http://localhost:3000/foobar/get").read puts(J

我有这样明显的控制器代码:

require "json"
require "open-uri"

class FoobarController < ApplicationController
    def get
        render json: { foo: 1, bar: 2 }
    end

    def output
        data = open("http://localhost:3000/foobar/get").read
        puts(JSON.parse(data))
    end
end
一个控制器的动作返回JSON,另一个动作下载并输出JSON

但是这段代码不能正常工作:Foobarget返回JSON,但是open。。。无法加载JSON服务器不响应

但是,尽管如此,当我尝试以这种方式加载和解析JSON时,它工作正常。 当我尝试在Foobaroutput中从外部服务器加载JSON时,它也能正常工作


但是,Rails、OpenURI和localhost这三个元素一起破坏了我的代码。为什么?

development env中使用的Webrick web服务器是用纯ruby编写的,一次只能处理一个请求。因此,来自控制器的请求等待当前请求完成

这会产生死锁,因此您的请求会挂起,当然其他服务器/源不会出现这些问题

解决方案 Webrick的替代品是,它可以运行concuren请求,有关更多信息和用法,请在GitHub上查看其自述文件

怎样 将精简添加到您的文件中

gem 'thin'
启动服务器

bundle exec thin start --threaded 

是的,当您编辑答案时,我安装了thin。不幸的是,它没有解决问题。您是否尝试过使用option-threaded在线程中调用Rack应用程序?现在我尝试了瘦启动线程。很抱歉,但问题仍然存在。很抱歉听到这个消息,顺便说一句,如果操作在同一个控制器中,那么在操作之间有实际请求似乎是一种反模式,也许您可以引入一些抽象层,创建两个操作都重新调整的有效负载。事实上,在我的常规项目操作中,它返回JSON和操作,解析它的,被放置在不同的控制器中。在这个测试应用程序中,为了简单起见,我将动作放在一个控制器中。但即使在这种情况下,这个问题也是实际存在的。