尝试使用独角兽部署时出现RoR-nginx问题

时间:2013-04-14 10:35:12

标签: ruby-on-rails deployment nginx unicorn

我是Ruby on Rails的初学者,并且在部署我的rails应用程序时遇到了一些困难(使用nginx + unicorn)。我不知道发生了什么,但这是我在启动nginx时在日志文件中遇到的错误:

2013/04/14 00:31:42 [error] 14469#0: *1 connect() to unix:/home/user/www/sahitoo/shared/sockets/unicorn.sock 
**failed (111: Connection refused)** while connecting to upstream, client: XX.XXX.XX.XX, server: myapp.com, 
request: "GET / HTTP/1.1", upstream: "http://unix:/home/user/www/sahitoo/shared/sockets/unicorn.sock:/", 
host: "www.XXXXX.com"

如果您可以帮助找出问题,或者至少给我一些建议来跟踪它,那将是非常好的! 非常感谢。

我还发布了nginx.conf文件:

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
  worker_connections 768;
  multi_accept on;
}

http {
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 65;
  types_hash_max_size 2048;

  include /etc/nginx/mime.types;
  default_type application/octet-stream;

  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log;

  gzip on;
  gzip_disable "msie6";

  gzip_http_version 1.1;
  gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

  ##
  # Virtual Host Configs
  ##

  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;

  upstream sahitoo {
    server unix:/home/kar/www/sahitoo/shared/sockets/unicorn.sock;
  }
}

使用 / etc / nginx / sites-enabled / sahitoo file:

server {
  listen 80;
  server_name myapp.com;

  access_log /var/log/nginx/sahitoo.access.log;
  error_log /var/log/nginx/sahitoo.error.log;

  root /www/sahitoo/public;

      # direct to maintenance if this file exists
      if (-f $document_root/system/maintenance.html) {
        rewrite  ^(.*)$  /system/maintenance.html last;
    break;
  }

  location / {
    proxy_redirect          http://sahitoo/               /;
    proxy_set_header        Host                                                            $host;
    proxy_set_header        X-Real-IP                                                     $remote_addr;
proxy_set_header  X-Forwarded-For                                               $proxy_add_x_forwarded_for;

    # If the file exists as a static file serve it directly
    if (-f $request_filename) {
      break;
    }

    if (!-f $request_filename) {
      proxy_pass http://sahitoo;
      break;
    }
  }

  error_page   500 502 503 504  /500.html;
  location = /500.html {
    root   /home/kar/www/sahitoo/public;
  }
}

2 个答案:

答案 0 :(得分:1)

如果您在其他用户(可能是root用户)上运行ruby并且它对当前用户没有任何权限,您确定从

获得结果会发生这种情况
  

'ruby -v'或'rails -v'

答案 1 :(得分:0)

我建议您看一下这个工作示例nginx.conf

upstream unicorn-your_app {
  server unix:/tmp/unicorn.your_app.sock fail_timeout=0;
}

server {
  listen 80;
  server_name myapp.com;
  root /www/sahitoo/current/public;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @unicorn-yourapp;
  location @unicorn-yourapp {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://unicorn-your_app;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}

正如您所看到的,有一些不同之处:

  • upstram阻止;
  • 根指向your_dir/current/public;
  • try_files例程;
  • location @unicorn-yourapp;

如果您希望对该主题有更深入的了解,那就非常好Railscast