出现错误的瘦启动("start_unix_server":没有 unix 域接受器(运行时错误))



我在nginx上部署了一个rails应用,使用capistrano (rails 4, ruby 2.1.2, thin 1.6.2, capistrano 2.1.5)。我开始用一个接一个的启动命令。并在thin.log文件中查看一些错误。有人能告诉我怎么修吗?

非常感谢!

thin.yml

 pid: /home/deploy/myapp/pids/thin.pid
 port: 3000
 timeout: 30
 wait: 30
 log: log/thin.log
 max_conns: 1024
 require: []
 environment: production
 max_persistent_conns: 512
 threaded: true
 no-epoll: true
 daemonize: true
 socket: /home/deploy/myapp/sockets/thin.sock
 chdir: /home/deploy/myapp/current
 address: 0.0.0.0

/etc/nginx/sites-availabel/违约

upstream myapp{
        server 127.0.0.1:3000;
        server 127.0.0.1:3001;
        server 127.0.0.1:3002;
}
server {
        listen   80;
        server_name _;
        character utf-8;

        access_log /home/deploy/myapp/log/access.log;
        error_log /home/deploy/myapp/log/error.log;
        root     /home/deploy/myapp/current/public;
        location / {
                proxy_pass http://127.0.0.1:3000;
        }
}

thin.log

Writing PID to /home/deploy/myapp/pids/thin.pid
Using rack adapter
Thin web server (v1.6.2 codename Doc Brown)
Maximum connections set to 1024
Listening on /home/deploy/myapp/sockets/thin.sock, CTRL+C to stop
Exiting!
/home/deploy/.rvm/gems/ruby-2.1.2/gems/eventmachine-1.0.3/lib/eventmachine.rb:528:in `start_unix_server': no unix-domain acceptor (RuntimeError)
    from /home/deploy/.rvm/gems/ruby-2.1.2/gems/eventmachine-1.0.3/lib/eventmachine.rb:528:in `start_server'
    from /home/deploy/.rvm/gems/ruby-2.1.2/gems/eventmachine-1.0.3/lib/eventmachine.rb:548:in `start_unix_domain_server'
    from /home/deploy/.rvm/gems/ruby-2.1.2/gems/thin-1.6.2/lib/thin/backends/unix_server.rb:19:in `connect'
    from /home/deploy/.rvm/gems/ruby-2.1.2/gems/thin-1.6.2/lib/thin/backends/base.rb:63:in `block in start'
    from /home/deploy/.rvm/gems/ruby-2.1.2/gems/eventmachine-1.0.3/lib/eventmachine.rb:187:in `call'
    from /home/deploy/.rvm/gems/ruby-2.1.2/gems/eventmachine-1.0.3/lib/eventmachine.rb:187:in `run_machine'
    from /home/deploy/.rvm/gems/ruby-2.1.2/gems/eventmachine-1.0.3/lib/eventmachine.rb:187:in `run'
    from /home/deploy/.rvm/gems/ruby-2.1.2/gems/thin-1.6.2/lib/thin/backends/base.rb:73:in `start'
    from /home/deploy/.rvm/gems/ruby-2.1.2/gems/thin-1.6.2/lib/thin/server.rb:162:in `start'
    from /home/deploy/.rvm/gems/ruby-2.1.2/gems/thin-1.6.2/lib/thin/controllers/controller.rb:87:in `start'
    from /home/deploy/.rvm/gems/ruby-2.1.2/gems/thin-1.6.2/lib/thin/runner.rb:199:in `run_command'
    from /home/deploy/.rvm/gems/ruby-2.1.2/gems/thin-1.6.2/lib/thin/runner.rb:155:in `run!'
    from /home/deploy/.rvm/gems/ruby-2.1.2/gems/thin-1.6.2/bin/thin:6:in `<top (required)>'
    from /home/deploy/.rvm/gems/ruby-2.1.2/bin/thin:23:in `load'
    from /home/deploy/.rvm/gems/ruby-2.1.2/bin/thin:23:in `<main>'
    from /home/deploy/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `eval'
    from /home/deploy/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `<main>'

一般来说:配置Thin和Nginx一起工作

我刚刚在我的VPS上遇到了几乎相同的问题。我不明白的是你的瘦配置结合了端口和套接字。我不知道这是不是个好办法。

但无论如何,这是我的建议:

您只需告诉Thin使用/home/deploy/myapp/sockets/thin.sock插座。好了,没事了。我将使用另一个目录的套接字(说/tmp或您的应用程序的tmp目录),但我不是专家,这是你的决定。

在Nginx端

如果你想让Thin和Nginx通信,你必须告诉Nginx Thin正在监听这个特定套接字上的传入请求。这里,在您的upstream块中,您告诉Nginx Thin正在监听localhost:3000上的传入请求。同样,由于您在Thin配置中同时使用端口和套接字,我不确定这是否可能是一个问题(但至少,这些设置中的一个对我来说似乎毫无用处,就Thin- nginx通信而言)。如果在同一台机器上使用Nginx和Thin,我认为套接字是更好的方法,因为它们使通信依赖于文件系统而不是HTTP请求,这应该更有效。要告诉Nginx Thin正在监听套接字,你必须使用upstream块,如下所示:

upstream myapp {
    server unix:/home/deploy/myapp/sockets/thin.sock;
}

从Thin配置文件判断,这个项目只有一个Thin实例在运行,所以你只需要一行server。如果你使用了2个Thin实例(在你的Thin yml配置中使用servers: 2),你会在nginx端做这样的事情:

upstream myapp {
    server unix:/home/deploy/myapp/sockets/thin.0.sock;
    server unix:/home/deploy/myapp/sockets/thin.1.sock;
}

"No unix-domain acceptor (RuntimeError)"

对于"no unix-domain acceptor (RuntimeError)"错误,它可能来自套接字目录上的权限问题,至少这是我刚才遇到这个问题的情况(不知道为什么,我的sockets目录消失了,当我再次创建它时,它必须具有正确的权限来避免此错误)。所以我会说检查一下;)

对于我来说,这个错误是由缺少套接字目录(在您的情况下,这将是/home/deploy/myapp/sockets)引起的。

这是我的nginx使用thin的样子。也许能帮上忙。

   upstream thin_server {
          server 0.0.0.0:8080 fail_timeout=0;
        }
        server {
                listen   80 default;
                root /home/example/public;
                server_name example.com www.example.com;
                index index.htm index.html;

                location / {
                        try_files $uri/index.html $uri.html $uri @app;
                }
                location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mp3|flv|mpeg|avi)$ {
                                try_files $uri @app;
                        }
                 location @app {
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header Host $http_host;
                        proxy_redirect off;
                        proxy_pass http://thin_server;
            }
            error_page 500 502 503 504 /500.html;
            client_max_body_size 4G;
            keepalive_timeout 10;
}

相关内容

最新更新