ruby-on-rails – 如果空闲时Rails停止响应

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如果空闲时Rails停止响应前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经遇到这个问题了一段时间,搜索了很多关于这一点,但似乎没有什么可以解决我的问题.

我有一个应用程序运行在Ruby on Rails与Nginx和UNICORN一切与Docker.

如果我运行应用程序(docker-compose up),网站完美运行了几分钟.如果网站保持空闲约5到10分钟,并发送另一个请求,rails应用程序停止响应,从Unicorn提供时间.

奇怪的是,我开发的每个应用程序都有同样的问题,而这些应用程序的唯一共同之处就是Gemfile.

到目前为止,我发现,当发送请求时,Nginx收到该请求,将其传递给Unicorn,Unicorn接收它并传递给没有回答的ruby …然后Unicorn给我502个不良请求.

我真的迷失在这一个.

这是我的Nginx配置文件

  1. upstream applicationName {
  2. # Path to Puma SOCK file,as defined prevIoUsly
  3. server unix:/tmp/applicationName.sock fail_timeout=0;
  4. }
  5.  
  6. server {
  7. listen 80;
  8. server_name dev.applicationName.com.br;
  9.  
  10. location / {
  11. autoindex on;
  12. proxy_set_header X-Real-IP $remote_addr;
  13. proxy_set_header X-Forwarded-For $remote_addr;
  14. proxy_set_header Host $host;
  15. # time out settings
  16. proxy_connect_timeout 159s;
  17. proxy_send_timeout 600;
  18. proxy_read_timeout 600;
  19. proxy_buffer_size 64k;
  20. proxy_buffers 16 32k;
  21. proxy_busy_buffers_size 64k;
  22. proxy_temp_file_write_size 64k;
  23. proxy_pass_header Set-Cookie;
  24. proxy_redirect off;
  25. proxy_hide_header Vary;
  26. proxy_set_header Accept-Encoding '';
  27. proxy_ignore_headers Cache-Control Expires;
  28. proxy_set_header Referer $http_referer;
  29. proxy_set_header Host $host;
  30. proxy_set_header Cookie $http_cookie;
  31. proxy_set_header X-Real-IP $remote_addr;
  32. proxy_set_header X-Forwarded-Host $host;
  33. proxy_set_header X-Forwarded-Server $host;
  34. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  35. proxy_pass http://applicationName;
  36. }
  37. }

这是我的独角兽配置

  1. @dir = File.expand_path(File.dirname(__FILE__)) + "/.."
  2.  
  3. worker_processes 2
  4. working_directory @dir
  5.  
  6. timeout 10
  7.  
  8. listen File.join('/tmp/applicationName.sock')
  9.  
  10. preload_app true# if ENV['RAILS_ENV'] != 'development'
  11.  
  12. GC.respond_to?(:copy_on_write_friendly=) and
  13. GC.copy_on_write_friendly = true
  14.  
  15. check_client_connection false
  16.  
  17. before_fork do |server,worker|
  18. Signal.trap 'TERM' do
  19. puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
  20. Process.kill 'QUIT',Process.pid
  21. end
  22.  
  23. defined?(ActiveRecord::Base) and
  24. ActiveRecord::Base.connection.disconnect!
  25. end
  26.  
  27. after_fork do |server,worker|
  28. Signal.trap 'TERM' do
  29. puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  30. end
  31.  
  32. defined?(ActiveRecord::Base) and
  33. ActiveRecord::Base.establish_connection
  34. end

这是Gemfile(没有错)

  1. source 'https://rubygems.org'
  2. gem 'rails','4.2.4'
  3. gem 'unicorn-rails','~> 2.2'
  4. gem 'pg'
  5. gem 'MysqL2','~> 0.3.18'
  6. gem 'sass-rails','~> 5.0'
  7. gem 'uglifier','>= 1.3.0'
  8. gem 'coffee-rails','~> 4.1.0'
  9. gem 'duktape'
  10. gem 'jquery-rails'
  11. gem 'turbolinks'
  12. gem 'jbuilder','~> 2.0'
  13. gem 'bootstrap-sass'
  14. gem 'devise'
  15. gem 'simple_form'
  16. gem 'minitest'
  17. gem "paperclip","~> 4.3"
  18. gem 'aws-sdk','< 2.0'
  19. gem 'mail_form','~> 1.5.0.rc'
  20. gem 'sendgrid-ruby'
  21. gem 'zopim_rails'
  22. gem 'Meta-tags'
  23. gem 'ckeditor'
  24. gem 'slick_rails'
  25.  
  26. group :development do
  27. gem 'better_errors'
  28. gem 'binding_of_caller',:platforms=>[:mri_20]
  29. gem 'quiet_assets'
  30. gem 'rails_layout'
  31. gem 'spring-commands-rspec'
  32. gem 'web-console','~> 2.0'
  33. gem 'spring'
  34. end
  35. group :production do
  36. gem 'therubyracer'
  37. end
  38. group :development,:test do
  39. gem 'factory_girl_rails'
  40. gem 'faker'
  41. gem 'pry-rails'
  42. gem 'pry-rescue'
  43. gem 'rspec-rails'
  44. gem 'rubocop'
  45. gem 'byebug'
  46. end
  47.  
  48. group :test do
  49. gem 'capybara'
  50. gem 'database_cleaner'
  51. gem 'launchy'
  52. gem 'selenium-webdriver'
  53. end

当服务器上的日志显示出来,当发生错误时:

  1. Nginx_1 | 172.17.0.1 - - [05/Feb/2016:12:52:41 +0000] "GET /products HTTP/1.1" 502 574 "http://dev.nutrimais.com.br/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/48.0.2564.82 Safari/537.36"
  2. web_1 | E,[2016-02-05T12:52:41.551728 #1] ERROR -- : reaped #<Process::Status: pid 9 SIGKILL (signal 9)> worker=0

而在开发日志中:

  1. Started GET "/products" for 127.0.0.1 at 2016-02-05 12:52:18 +0000
  2. Cannot render console from 127.0.0.1! Allowed networks: 127.0.0.1,::1,127.0.0.0/127.255.255.255

解决方法

我听说过独角兽这样的问题,如果一个网站没有访问(平均)30分钟,下一个查询将超时,并且所有打开的工作人员将超时.我不知道为什么会发生这种情况.
我希望下面的链接可以帮助你

http://bogomips.org/unicorn-public/CAKM1sPNRsES6H6ByK6bO9Djwa8WvYV6HJ-rEaHopRUYBVFfuhg@mail.gmail.com/t/

猜你在找的Ruby相关文章