2016-02-05 11 views
12

मुझे थोड़ी देर के लिए यह समस्या हो रही है और इसके बारे में बहुत कुछ पता चला है, लेकिन मेरी समस्या को हल करने के लिए कुछ भी नहीं लगता है।रेलल्स जवाब देना बंद कर देता है अगर निष्क्रिय

मेरे पास एनजीआईएनएक्स और यूनिकोरन डॉकर के साथ सब कुछ के साथ रेल पर रुबी में चल रहा है।

यदि मैं एप्लिकेशन चलाता हूं (डॉकर-कंपोज़ अप) वेबसाइट कुछ मिनटों के लिए पूरी तरह से चलती है। यदि वेबसाइट लगभग 5 से 10 मिनट तक निष्क्रिय रहती है, और मैं एक और अनुरोध भेजता हूं तो रेल एप्लिकेशन यूनिकॉर्न से समय देने का जवाब देना बंद कर देता है।

अजीब हिस्सा यह है कि मेरे द्वारा विकसित हर एप्लिकेशन में एक ही समस्या है और इन अनुप्रयोगों में आम बातों में एकमात्र चीज Gemfile है।

मुझे अब तक जो मिला है वह यह है कि जब अनुरोध भेजा जाता है, तो एनजीआईएनएक्स को यह अनुरोध प्राप्त होता है, इसे यूनिकॉर्न में भेज दिया जाता है, यूनिकॉर्न इसे प्राप्त करता है और रूबी से गुजरता है ... जो जवाब नहीं देता है और फिर यूनिकॉर्न मुझे 502 खराब देता है निवेदन।

मैं वास्तव में इस पर खो गया हूं।

इस

मेरी nginx कॉन्फ़िग फ़ाइल है:

upstream applicationName { 
    # Path to Puma SOCK file, as defined previously 
    server unix:/tmp/applicationName.sock fail_timeout=0; 
} 

server { 
    listen 80; 
    server_name dev.applicationName.com.br; 

    location/{ 
    autoindex on; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $remote_addr; 
    proxy_set_header Host $host; 
    # time out settings 
    proxy_connect_timeout 159s; 
    proxy_send_timeout 600; 
    proxy_read_timeout 600; 
    proxy_buffer_size 64k; 
    proxy_buffers  16 32k; 
    proxy_busy_buffers_size 64k; 
    proxy_temp_file_write_size 64k; 
    proxy_pass_header Set-Cookie; 
    proxy_redirect  off; 
    proxy_hide_header Vary; 
    proxy_set_header Accept-Encoding ''; 
    proxy_ignore_headers Cache-Control Expires; 
    proxy_set_header Referer $http_referer; 
    proxy_set_header Host $host; 
    proxy_set_header Cookie $http_cookie; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-Host $host; 
    proxy_set_header X-Forwarded-Server $host; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_pass http://applicationName; 
    } 
} 

और ये मेरे गेंडा config

@dir = File.expand_path(File.dirname(__FILE__)) + "/.." 

worker_processes 2 
working_directory @dir 

timeout 10 

listen File.join('/tmp/applicationName.sock') 

preload_app true# if ENV['RAILS_ENV'] != 'development' 

GC.respond_to?(:copy_on_write_friendly=) and 
    GC.copy_on_write_friendly = true 

check_client_connection false 

before_fork do |server, worker| 
    Signal.trap 'TERM' do 
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead' 
    Process.kill 'QUIT', Process.pid 
    end 

    defined?(ActiveRecord::Base) and 
    ActiveRecord::Base.connection.disconnect! 
end 

after_fork do |server, worker| 
    Signal.trap 'TERM' do 
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT' 
    end 

    defined?(ActiveRecord::Base) and 
    ActiveRecord::Base.establish_connection 
end 

यह वह जगह है Gemfile (इसके साथ कुछ भी गलत नहीं)

source 'https://rubygems.org' 
gem 'rails', '4.2.4' 
gem 'unicorn-rails', '~> 2.2' 
gem 'pg' 
gem 'mysql2', '~> 0.3.18' 
gem 'sass-rails', '~> 5.0' 
gem 'uglifier', '>= 1.3.0' 
gem 'coffee-rails', '~> 4.1.0' 
gem 'duktape' 
gem 'jquery-rails' 
gem 'turbolinks' 
gem 'jbuilder', '~> 2.0' 
gem 'bootstrap-sass' 
gem 'devise' 
gem 'simple_form' 
gem 'minitest' 
gem "paperclip", "~> 4.3" 
gem 'aws-sdk', '< 2.0' 
gem 'mail_form', '~> 1.5.0.rc' 
gem 'sendgrid-ruby' 
gem 'zopim_rails' 
gem 'meta-tags' 
gem 'ckeditor' 
gem 'slick_rails' 

group :development do 
    gem 'better_errors' 
    gem 'binding_of_caller', :platforms=>[:mri_20] 
    gem 'quiet_assets' 
    gem 'rails_layout' 
    gem 'spring-commands-rspec' 
    gem 'web-console', '~> 2.0' 
    gem 'spring' 
end 
group :production do 
    gem 'therubyracer' 
end 
group :development, :test do 
    gem 'factory_girl_rails' 
    gem 'faker' 
    gem 'pry-rails' 
    gem 'pry-rescue' 
    gem 'rspec-rails' 
    gem 'rubocop' 
    gem 'byebug' 
end 

group :test do 
    gem 'capybara' 
    gem 'database_cleaner' 
    gem 'launchy' 
    gem 'selenium-webdriver' 
end 

लॉग है सर्वर पर मुझे यह दिखाता है, जब त्रुटि होती है:

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" 
web_1 | E, [2016-02-05T12:52:41.551728 #1] ERROR -- : reaped #<Process::Status: pid 9 SIGKILL (signal 9)> worker=0 

और विकास लॉग पर:

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

आप इसे थोड़ा और अधिक डिबग करने की कोशिश की? अपने रेल सर्वर को सीधे लॉन्च करने की तरह (रेल के उत्पादन) और उस तक पहुंच या यात्री या प्यूमा जैसे यूनिकॉर्न के बराबर कोशिश कर रहे हैं? यदि चीजें अभी भी विकल्पों के साथ गलत हो जाती हैं, तो यह निश्चित रूप से चीजों को कम कर देगा, आपको नहीं लगता? :) – Kulgar

+0

मैंने प्यूमा की कोशिश की है और यह बदतर था। एप्लिकेशन को कुछ मिनटों के बाद धीमा होना शुरू हो गया और दुर्घटनाग्रस्त हो गया, जिससे उपयोगकर्ता फिर से वेब साइट दर्ज कर सके। –

+0

यह अजीब बात है ... और जब आप "रेल सर्वर उत्पादन" लॉन्च करते हैं तो क्या होता है और आप http: // your_server_ip: 3000 के माध्यम से इसे सीधे एक्सेस करते हैं? – Kulgar

उत्तर

0

विलेख में यह मेरी Linux सर्वर और डीबी, जो किसी अन्य सर्वर में स्थित है फ़ायरवॉल साथ एक समस्या है मदद कर सकता है। मैंने जो किया वह डीबी सर्वर को उसी मशीन पर लाता है जो मेरे रेल अनुप्रयोग के रूप में होता है। इसे ठीक करने का एक और तरीका सर्वर मशीन के फ़ायरवॉल नियमों को बदलना है। मैंने ऐसा नहीं किया है और यह सुनिश्चित नहीं किया कि कैसे करें। ऐसा लगता है कि यह समस्या केवल MySQL के साथ होती है।

0

मैं गेंडा है कि यदि एक साइट (औसत) के आसपास तक नहीं पहुंचा है 30 मिनट के अगले क्वेरी का समय-समाप्त होगा साथ इस तरह के मुद्दों के बारे में सुना है, और यह होगा सभी श्रमिकों पर टाइमआउट खोला गया। मुझे यकीन नहीं है कि ऐसा क्यों होता है। मुझे आशा है कि folowing लिंक आप

http://bogomips.org/unicorn-public/[email protected]om/t/

+0

अपना लिंक पढ़ना, ऐसा लगता है कि यह डीबी कनेक्शन के साथ लिनक्स पर फ़ायरवॉल के साथ एक समस्या है। लेकिन क्या यह डॉकर छवि या मेरे सर्वर के लिनक्स का लिनक्स है? और जवाब यह नहीं है कि मुझे क्या करना है। –

1

MySQL को उसी सर्वर पर ले जाने का आपका फ़िक्स भी मेरे लिए समस्या को ठीक करता है लेकिन यह मेरे उत्पादन वातावरण के लिए उपयुक्त नहीं है, इसलिए मैंने उस सेटअप के साथ अंतर को गहरा कर दिया।

बाहर निकला यह एप्लिकेशन स्टैक या कॉन्फ़िगरेशन से संबंधित कुछ भी नहीं था, लेकिन मेरे सत्रों को मारने वाला एक एनएटी टाइमआउट।

मेरे पास Azure पर मेरा सर्वर और AWS में मेरा डेटाबेस था। Azure में आउटबाउंड कनेक्शन पर 4 मिनट का असुरक्षित एनएटी टाइमआउट है। इसका मतलब है कि यदि डेटाबेस कनेक्शन 4 मिनट से अधिक समय तक निष्क्रिय था, तो एज़ूर बस बंदरगाह मैपिंग को चुपचाप मार देगा और रेलगाड़ी ऐप ने उस बंदरगाह को चुपचाप भेजने का प्रयास किया था, चुपचाप ब्लैक होल में चला गया।

फिक्स सर्वर पर ओएस स्तर पर this blob प्रति फिक्स था: एनटीए टाइमआउट के लिए टीसीपी रखरखाव अंतराल को छोड़ दें, और नए रखरखाव अंतराल के लिए रखरखाव अंतराल और पुन: ट्रांसमिशन को उचित मानों में समायोजित करें।

लिनक्स के लिए, आप इस प्रकार इन कर्नेल चर बदलना चाहिए:

sudo sysctl net.ipv4.tcp_keepalive_time = 120  
sudo sysctl net.ipv4.tcp_keepalive_intvl = 30 
sudo sysctl net.ipv4.tcp_keepalive_probes = 8 

Windows के लिए, आप नीचे दिए गए रजिस्ट्री मान बदलना चाहिए। HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters में

सभी DWORD रों:

KeepAliveInterval = 30 
KeepAliveTime = 120 
TcpMaxDataRetransmissions = 8 
+0

यह वास्तव में एक अच्छा समाधान है! –

संबंधित मुद्दे