Задать вопрос
@Pianista

При деплое rails приложения на VDS. Ошибка 110: Connection timed out. Куда копать?

На VDS деплою приложение rails с помощью Capistrano.
Сервер nginx + unicorn
Через несколько минут после развертывания, приложение перестает отвечать, в /var/log/nginx/app_error.log появляется следующая ошибка:
[error] 8689#0: *64 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 94.29.117.167, server: domain.com, request: "GET / HTTP/1.1", upstream: "http://unix:/var/www/nameapp/current/tmp/sockets/unicorn.sock:/", host: "domain.com"

После этой ошибки приложение совсем перестает отвечать. Постоянная ошибка 504, после ребута сервера все снова по той же схеме.
Все перекопал, не могу найти решения.

Конфиг Nginx /etc/nginx/conf.d/nameapp.conf
upstream nameapp_unicorn {
    server unix:/var/www/nameapp/current/tmp/sockets/unicorn.sock fail_timeout=0;
}

server {
    server_name domain.com;

    listen 80;

    client_max_body_size 100m;

    root       /var/www/nameapp/current/public;
    error_log  /var/log/nginx/app_error.log;
    access_log /var/log/nginx/app_access.log;

    error_page 404             /404.html;
    error_page 500 502 503 504 /50x.html;

    location /assets {
        access_log off;
        expires 30d;
    }

    location / {
        try_files $uri @app;
    }

    location @app {
        proxy_pass http://nameapp_unicorn;
        proxy_set_header Host $http_host;
        proxy_set_header Referer $http_referer;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_redirect off;
        proxy_read_timeout 150;
    }
}


Конфиг Unicorn /config/unicorn.rb
APP_PATH = File.expand_path('../../', __FILE__)

working_directory APP_PATH
listen            APP_PATH + '/tmp/sockets/unicorn.sock'
worker_processes  2
timeout           30
preload_app       true

before_exec do |server|
  ENV['BUNDLE_GEMFILE'] = APP_PATH + '/Gemfile'
end

before_fork do |server, worker|
  ActiveRecord::Base.connection.disconnect! if defined?(ActiveRecord::Base)
  Resque.redis.quit if defined?(Resque)
  sleep 1
end

after_fork do |server, worker|
  ActiveRecord::Base.establish_connection if defined?(ActiveRecord::Base)
  Resque.redis = 'localhost:6379' if defined?(Resque)
end


Буду рад любой помощи!
  • Вопрос задан
  • 352 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@Pianista Автор вопроса
Решение было в правильной настройке демона runit для Unicorn
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
b0nn1e
@b0nn1e
Alcohol & Ruby on Rails
Сделайте попроще путь к сокету в nginx и в unicorn.
Для nginx:
upstream nameapp_unicorn {
    server unix:/tmp/app_name-unicorn.sock fail_timeout=0;
}

ну и аналогично для unicorn.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы