Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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 Nginx+;独角兽&x2B;在任何tcp连接空闲之前,Rails不允许超过6个请求_Ruby On Rails_Ruby_Nginx_Tcp - Fatal编程技术网

Ruby on rails Nginx+;独角兽&x2B;在任何tcp连接空闲之前,Rails不允许超过6个请求

Ruby on rails Nginx+;独角兽&x2B;在任何tcp连接空闲之前,Rails不允许超过6个请求,ruby-on-rails,ruby,nginx,tcp,Ruby On Rails,Ruby,Nginx,Tcp,我在RubyonRails中有一个应用程序,它与unicorn和nginx一起运行。我有几个请求需要一些时间来处理,因为数据库很大 在6点之前,我可以毫不延迟地浏览我的申请。当我运行netstat-n | grep'CONNECTED'时,它说 unix 3 [ ] STREAM CONNECTED 37992166 /home/user/myapp/shared/sockets/unicorn.sock unix 3 [ ]

我在RubyonRails中有一个应用程序,它与unicorn和nginx一起运行。我有几个请求需要一些时间来处理,因为数据库很大

在6点之前,我可以毫不延迟地浏览我的申请。当我运行
netstat-n | grep'CONNECTED'
时,它说

unix  3      [ ]         STREAM     CONNECTED     37992166 /home/user/myapp/shared/sockets/unicorn.sock
unix  3      [ ]         STREAM     CONNECTED     37989365 /home/user/myapp/shared/sockets/unicorn.sock
unix  3      [ ]         STREAM     CONNECTED     37993053 /home/user/myapp/shared/sockets/unicorn.sock
unix  3      [ ]         STREAM     CONNECTED     37992166 /home/user/myapp/shared/sockets/unicorn.sock
unix  3      [ ]         STREAM     CONNECTED     37989335 /home/user/myapp/shared/sockets/unicorn.sock
unix  3      [ ]         STREAM     CONNECTED     37993083 /home/user/myapp/shared/sockets/unicorn.sock
当我运行
netstat-n | grep'CONNECTING'
时,它没有显示任何内容

但是在6次请求之后,当我再次运行同一个命令时,除了上面的命令外,它说

unix  3      [ ]         STREAM     CONNECTING     37989334 /home/user/myapp/shared/sockets/unicorn.sock
unix  3      [ ]         STREAM     CONNECTING     37993089 /home/user/myapp/shared/sockets/unicorn.sock
即使当我试图从Firefox发送请求时,它也会添加到
连接中
东西,如果我没有错的话,等待tcp释放

请帮助我如何解决此错误。谢谢

这就是我的
unicorn.rb
的样子

working_directory "/home/user/myapp/current"
pid "/home/user/myapp/shared/pids/unicorn.pid"
stderr_path "/home/user/myapp/shared/log/unicorn.log"
stdout_path "/home/user/myapp/shared/log/unicorn.log"

listen "/home/user/myapp/shared/sockets/unicorn.sock", backlog: 64
worker_processes 6

preload_app true

timeout 600

before_fork do |server, worker|
  defined?(ActiveRecord::Base) &&
    ActiveRecord::Base.connection.disconnect!

    # Quit the old unicorn process
    old_pid = "#{server.config[:pid]}.oldbin"
    if File.exists?(old_pid) && server.pid != old_pid
      begin
        Process.kill("QUIT", File.read(old_pid).to_i)
      rescue Errno::ENOENT, Errno::ESRCH
        # someone else did our job for us
      end
    end
end

after_fork do |server, worker|
  if defined?(ActiveRecord::Base)
    config = ActiveRecord::Base.configurations[Rails.env] ||
            Rails.application.config.database_configuration[Rails.env]
    config['pool']  = ENV['DB_POOL']  || ENV['RAILS_MAX_THREADS'] || 10
    ActiveRecord::Base.establish_connection(config)
  end
end

Unicorn是一个单线程应用服务器。这意味着:单个unicorn工作进程在任何时候只能处理一个请求

由于您已在
unicorn.rb
中将
worker\u进程数配置为6,因此这就是您的应用程序可以处理的并发请求的确切数量


要解决这个问题,您可以增加工作进程的数量,或者(如果您的应用程序支持多线程)使用不同的应用程序服务器,允许在一个进程中使用多个线程,然后每个线程都可以处理单个请求。这种部署的常见应用服务器是和。

Unicorn是单线程应用服务器。这意味着:单个unicorn工作进程在任何时候只能处理一个请求

由于您已在
unicorn.rb
中将
worker\u进程数配置为6,因此这就是您的应用程序可以处理的并发请求的确切数量


要解决这个问题,您可以增加工作进程的数量,或者(如果您的应用程序支持多线程)使用不同的应用程序服务器,允许在一个进程中使用多个线程,然后每个线程都可以处理单个请求。这种部署的常见应用程序服务器是和。

你的unicorn.rb是什么样子的?用
unicorn.rb
Rails.application.config.database_配置['production']['pool']
报告更新了我的问题(在你的生产节点上)它表示为nil,这就是为什么在下一行中添加了单独的
池。另外,当我将工作人员从6人改为20人时,它现在正在接受20人的请求。那么,当我是唯一一个创建20个请求的人时,这会阻止其他用户的请求吗?你的unicorn.rb是什么样子的?用
unicorn.rb
Rails.application.config.database_配置['production']['pool']
报告更新了我的问题(在你的生产节点上)它表示为nil,这就是为什么在下一行中添加了单独的
池。另外,当我将工作人员从6人改为20人时,它现在正在接受20人的请求。那么,当我是唯一一个创建20个请求的人时,这会阻止其他用户的请求吗