Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 4 RubyonRails-activerecord和view呈现时间小,但响应时间大_Ruby On Rails 4_Ruby 2.2 - Fatal编程技术网

Ruby on rails 4 RubyonRails-activerecord和view呈现时间小,但响应时间大

Ruby on rails 4 RubyonRails-activerecord和view呈现时间小,但响应时间大,ruby-on-rails-4,ruby-2.2,Ruby On Rails 4,Ruby 2.2,我有一个RubyonRails应用程序,它可以很好地处理大多数API请求,但对于某些API请求,它只是挂起。ActiveRecord查询在短时间内完成,视图也在短时间内呈现,但响应时间非常长 Rails版本是4.2.5,Ruby版本是2.2.0,我使用的数据库是Postgresql。下面我附上我的GEM文件和生产日志,以及发生这种情况的代码 生产日志 I, [2019-09-07T09:23:45.748270 #22745] INFO -- : Started GET "/api/v3/re

我有一个RubyonRails应用程序,它可以很好地处理大多数API请求,但对于某些API请求,它只是挂起。ActiveRecord查询在短时间内完成,视图也在短时间内呈现,但响应时间非常长

Rails版本是4.2.5,Ruby版本是2.2.0,我使用的数据库是Postgresql。下面我附上我的GEM文件和生产日志,以及发生这种情况的代码

生产日志

I, [2019-09-07T09:23:45.748270 #22745]  INFO -- : Started GET "/api/v3/restaurants/1/accepted_orders?skip_search=1" for
    165.228.89.233 at 2019-09-07 09:23:45 +0000 
I, [2019-09-07T09:23:45.753331 #22745]  INFO -- : Processing by Api::V3::Staff::OrdersController#accepted_index as JSON 
I, [2019-09-07T09:23:45.753387 #22745]  INFO -- :   Parameters: {"skip_search"=>"1", "id"=>"1"} 
D, [2019-09-07T09:23:45.756807 #22745] DEBUG -- :   User Load (2.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1  ORDER BY "users"."id" ASC LIMIT 1  [["id", 6]] 
D, [2019-09-07T09:23:45.761643 #22745] DEBUG -- :   User Load (3.9ms)  SELECT  "users".* FROM "users" WHERE "users"."uid" = $1 LIMIT 1  [["uid", "example@gmail.com"]] 
D, [2019-09-07T09:23:45.765724 #22745] DEBUG -- :   Eula Load (3.1ms)  SELECT  "eulas".* FROM "eulas" WHERE "eulas"."is_latest" = $1 LIMIT 1  [["is_latest", "t"]] 
D, [2019-09-07T09:23:45.768793 #22745] DEBUG -- :   Privacy Load (2.7ms)  SELECT  "privacies".* FROM "privacies" WHERE "privacies"."is_latest" = $1 LIMIT 1  [["is_latest", "t"]] 
D, [2019-09-07T09:23:45.772602#22745] DEBUG -- :   Restaurant Load (3.0ms)  SELECT  "restaurants".* FROM "restaurants" WHERE "restaurants"."id" = $1 LIMIT 1  [["id", 1]] 
D, [2019-09-07T09:23:46.293350 #22745] DEBUG -- :   Order Load (519.6ms)  SELECT "orders".* FROM "orders" WHERE "orders"."restaurant_id" IN (1) 
D, [2019-09-07T10:44:50.564263 #22745] DEBUG -- :    (19.8ms)  SELECT COUNT(*) FROM "orders" WHERE "orders"."status" = $1 AND "orders"."restaurant_id" = 1 AND ( DATE(orders.created_at) >= '2019-09-07 09:45:50 UTC')  [["status", 1]] 
D, [2019-09-07T10:44:50.577108 #22745] DEBUG -- :    (11.7ms)  SELECT COUNT(*) FROM "orders" WHERE "orders"."status" = $1 AND "orders"."restaurant_id" = 1 AND ( DATE(orders.created_at) >= '2019-09-07 09:45:50 UTC')  [["status", 0]] 
D, [2019-09-07T10:44:50.580691 #22745] DEBUG -- :   User Exists (1.5ms)  SELECT  1 AS one FROM "users" WHERE ("users"."email" = 'example@gmail.com' AND "users"."id" != 6) LIMIT 1 
D, [2019-09-07T10:44:50.582116 #22745] DEBUG -- :   User Exists (0.6ms)  SELECT  1 AS one FROM "users" WHERE ("users"."username" = 'Staff 1' AND "users"."id" != 6) LIMIT 1 
D, [2019-09-07T10:44:50.584594#22745] DEBUG -- :   User Exists (1.8ms)  SELECT  1 AS one FROM "users" WHERE ("users"."phone_number" = '+777777777' AND "users"."id" != 6) LIMIT 1 
I, [2019-09-07T10:44:50.586265 #22745] INFO -- : Completed 200 OK in 4864833ms (Views: 0.3ms | ActiveRecord:
        570.2ms)
代码中有错误的部分

api :GET, '/v3/restaurants/:id/accepted_orders', 'Returns all accepted orders of a restaurant (for staff and owners)'
param :id, String, desc: 'id of the restaurant', required: true
def accepted_index
  query = " DATE(orders.created_at) >= '#{59.minutes.ago}'" if current_user.staff?
  accepted = Order.where(status: Order.statuses[:accepted], restaurant: @restaurant).where(query)
  pending = Order.where(status: Order.statuses[:pending], restaurant: @restaurant).where(query)
  render json: {accepted_count: accepted.count, pending_count: pending.count}
end
Gemfile

source 'https://rubygems.org'
ruby '2.2.0'
gem 'rails', '4.2.5'
gem 'pg'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'jbuilder', '~> 2.0'
gem 'annotate'

gem 'activeadmin', github: 'activeadmin'
gem 'paper_trail', '~> 4.0.0'
gem 'dotenv-rails'
# MailChimp integration
gem 'gibbon'
gem 'google_directions'
gem 'geocoder'
gem 'stripe', :git => 'https://github.com/stripe/stripe-ruby'
# The push notification service.
gem 'rpush', github: 'rpush/rpush'
gem 'prawn-rails'
gem 'prawn-table'
gem 'active_admin_datetimepicker'
gem 'phony_rails'
gem 'closure_tree'
gem 'whenever', require: false
group :development, :test do
  gem 'byebug'
end
group :development do
  gem 'pry'
  gem 'web-console', '~> 2.0'
  gem 'spring'
  gem 'letter_opener'
end
gem 'apipie-rails'
gem 'devise'
gem 'high_voltage'
gem 'simple_form'
gem 'rack-cors', :require => 'rack/cors'
gem 'omniauth'
gem 'devise_token_auth'
gem 'sidekiq', '~> 4.0', '>= 4.0.1'
# gem 'ckeditor', '~> 4.1', '>= 4.1.5'
gem 'socket.io-client-simple'
gem 'houston'
gem 'fancybox-rails', '~> 0.3.0'
gem 'mini_magick', '~> 4.3', '>= 4.3.6'
gem 'carrierwave', '~> 0.10.0'
gem 'fog', '~> 1.36'
gem 'chosen-rails'
gem 'twilio-ruby', '~> 4.11.1'
group :development do
  gem 'better_errors'
  gem 'quiet_assets'
  gem 'rails_layout'
  gem 'spring-commands-rspec'
  gem 'capistrano', '~> 3.1.0'
  gem 'capistrano-bundler', '~> 1.1.2'
  gem 'capistrano-rails', '~> 1.1.1'
  gem 'capistrano-rvm', github: "capistrano/rvm"
  gem 'capistrano-sidekiq'
  gem 'rest-client'
end
group :development, :test do
  gem 'factory_girl_rails'
  gem 'faker'
  gem 'rspec'
  gem 'fakeredis'
  gem 'rspec-rails'
  gem 'shoulda-matchers', '~> 3.0'
  gem 'shoulda-callback-matchers', '~> 1.1.1'
  gem 'redis-namespace'
end
group :test do
  gem 'capybara'
  gem 'database_cleaner'
  gem 'launchy'
  gem 'selenium-webdriver'
end
gem 'sinatra', :require => nil
在生产服务器上,我使用nginx和Passenger


谢谢

没有足够的信息进行调试,但我怀疑存在某种资源锁定。您还需要什么信息,请告诉我,我将尝试获取。查看现有日志,在加载所有订单和计算订单之间有1小时的间隔。我会把搜索的重点放在这两条代码之间的代码路径上。另外,请查看监控和记录慢速Postgres查询。没有足够的信息进行调试,但我怀疑存在某种资源锁定。您还需要什么信息,请告诉我,我将尝试获取。查看现有日志,在加载所有订单和计算订单之间有1小时的间隔。我会把搜索的重点放在这两条代码之间的代码路径上。此外,还可以监视和记录慢速Postgres查询。