代码之家  ›  专栏  ›  技术社区  ›  mattC

部署时不创建Rails+Nginx+Unicorn-Unicorn.sock文件

  •  0
  • mattC  · 技术社区  · 6 年前

    我从中得到以下错误

    I, [2018-10-01T19:54:53.470419 #4905]  INFO -- : unlinking existing
    socket=/home/deploy/production/appName/tmp/sockets
    /bcrypt_unicorn.todo.sock
    I, [2018-10-01T19:54:53.470635 #4905]  INFO -- : listening on addr=/home/deploy/production/appName/tmp/sockets/bcrypt_unicorn.todo.sock fd=10
    I, [2018-10-01T19:54:53.470737 #4905]  INFO -- : worker=0 spawning...
    I, [2018-10-01T19:54:53.471045 #4905]  INFO -- : worker=1 spawning...
    I, [2018-10-01T19:54:53.471397 #4905]  INFO -- : master process ready
    I, [2018-10-01T19:54:53.476589 #4908]  INFO -- : worker=0 spawned pid=4908
    I, [2018-10-01T19:54:53.476714 #4908]  INFO -- : Refreshing Gem list
    I, [2018-10-01T19:54:53.477787 #4910]  INFO -- : worker=1 spawned pid=4910
    I, [2018-10-01T19:54:53.477910 #4910]  INFO -- : Refreshing Gem list
    I, [2018-10-01T19:54:59.740522 #4908]  INFO -- : worker=0 ready
    I, [2018-10-01T19:54:59.744825 #4910]  INFO -- : worker=1 ready
    

    以下错误来自 /var/log/nginx/error.log :

    2018/10/01 20:00:41 [crit] 5067#5067: *2 connect() to unix:/home/deploy
    /production/appName/tmp/sockets/bcrypto_unicorn.todo.sock failed
    (2: No such file or directory) while connecting to upstream, client:
    77.75.77.32, server: , request: "GET /genres/gaming HTTP/1.1", upstream:
    "http://unix:/home/deploy/production/appName/tmp/sockets
    /bcrypto_unicorn.todo.sock:/genres/gaming", host: "appName.com"
    

    sudo service nginx restart
    

    重新加载更新的配置

    sudo nginx -s reload
    

    然后停止运行Unicorn进程

    ps aux | grep "unicorn master"
    kill -9 PID
    

    然后提取更新的代码进行部署

    git status
    git stash save -u quick-fix
    git pull origin master
    git stash apply
    

    然后迁移数据库

    RAILS_ENV=production rake db:migrate
    RAILS_ENV=production rake assets:precompile
    

    最后独角兽重新启动

    bundle exec unicorn -E production -c config/unicorn.rb -D
    

    独角兽.rb

    app_path = "/home/deploy/production/appName"
    working_directory app_path
    pid app_path + "/tmp/pids/unicorn.pid"
    stderr_path app_path + "/log/unicorn.log"
    stdout_path app_path + "/log/production.log"
    listen app_path + '/tmp/sockets/bcrypt_unicorn.todo.sock'
    worker_processes 2
    timeout 65
    

    appName/config/nginx.conf文件

    upstream unicorn {
      server unix:/tmp/sockets/bcrypto_unicorn.todo.sock fail_timeout=0;
    }
    
    server{
      listen 80 default deferred;
      root /home/deploy/production/appName/public;
    
      try_files $uri/index.html $uri @unicorn;
    
      location @unicorn{
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://unicorn;
      }
    
      error_page 403 404 /404.html;
    
      error_page 500 502 503 504 /500.html;
    
      client_max_body_size 4G;
      keepalive_timeout 10;
    }
    

    /etc/nginx/nginx.conf文件

    user www-data;
    worker_processes auto;
    pid /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;
        # server_tokens off;
    
        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;
    
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
    
        ##
        # SSL Settings
        ##
    
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;
    
        ##
        # Logging Settings
        ##
    
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
    
        ##
        # Gzip Settings
        ##
    
        gzip on;
        gzip_disable "msie6";
    
        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json    application/javascript text/xml applicati$
    
        ##
        # Virtual Host Configs
        ##
    
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
    }
    

    /etc/nginx/站点已启用/bcrypto

    upstream bcrypto_unicorn {
        server unix:/home/deploy/production/appName/tmp/sockets/bcrypto_unicorn.todo.sock fa$
    }
    
    server {
        listen 80 default deferred;
        root /home/deploy/production/appName/public;
    
        location ^~ /assets/ {
            gzip_static on;
            expires max;
            add_header Cache-Control public;
        }
    
        try_files $uri/index.html $uri @bcrypto_unicorn;
    
        location @bcrypto_unicorn {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass http://bcrypto_unicorn;
        }
    
        error_page 422 500 502 503 504 /500.html;
        client_max_body_size 4G;
        keepalive_timeout 60;
    }
    

    2 回复  |  直到 6 年前
        1
  •  1
  •   R. Sierra    6 年前

    问题是Nginx在Unicorn设置的另一个地方寻找套接字。

    Nginx正在尝试在以下位置查找套接字: /home/deploy/production/appName/tmp/sockets/byc2-master_unicorn.todo.sock 当Unicorn配置将其设置为 /tmp/appName_unicorn.todo.sock

    要解决这个问题,两条路径必须相同。所以你需要把同样的路径放在 上游 /etc/nginx/站点已启用/bcrypto 以及 中的指令

        2
  •  2
  •   H Dox    6 年前

    首先,检查你的 tmp/sockets

    mkdir /home/deploy/production/appName/tmp/sockets
    

    然后,换你的衣服 socket 通过修改 unicorn.rb

    listen app_path + '/tmp/sockets/bcrypt_unicorn.todo.sock'
    

    bundle exec unicorn -E production -c config/unicorn.rb -D