2014-09-01 41 views
0

nginx.conf部署Rails4:/socket/.unicorn.sock失败(2:没有这样的文件或目录),同时连接到上游

user nginx web; 

pid /var/run/nginx.pid; 
error_log /var/www/log/nginx.error.log; 

events { 
    worker_connections 1024; # increase if you have lots of clients 
    accept_mutex off; # "on" if nginx worker_processes > 1 
    use epoll; # enable for Linux 2.6+ 
    # use kqueue; # enable for FreeBSD, OSX 
} 

http { 
    # nginx will find this file in the config directory set at nginx build time 
    include mime.types; 
    types_hash_max_size 2048; 
    server_names_hash_bucket_size 64; 
    # fallback in case we can't determine a type 
    default_type application/octet-stream; 

    # click tracking! 
    access_log /var/www/log/nginx.access.log combined; 

    # you generally want to serve static files with nginx since neither 
    # Unicorn nor Rainbows! is optimized for it at the moment 
    sendfile on; 

    tcp_nopush on; # off may be better for *some* Comet/long-poll stuff 
    tcp_nodelay off; # on may be better for some Comet/long-poll stuff 

    # we haven't checked to see if Rack::Deflate on the app server is 
    # faster or not than doing compression via nginx. It's easier 
    # to configure it all in one place here for static files and also 
    # to disable gzip for clients who don't get gzip/deflate right. 
    # There are other gzip settings that may be needed used to deal with 
    # bad clients out there, see http://wiki.nginx.org/NginxHttpGzipModule 
    gzip on; 
    gzip_http_version 1.0; 
    gzip_proxied any; 
    gzip_min_length 0; 
    gzip_vary on; 
    gzip_disable "MSIE [1-6]\."; 
    gzip_proxied expired no-cache no-store private auth; 
    gzip_comp_level 9; 
    gzip_types text/plain text/xml text/css 
      text/comma-separated-values 
      text/javascript application/x-javascript 
      application/atom+xml; 

    # this can be any application server, not just Unicorn/Rainbows! 
    upstream app_server { 
    server unix:/var/www/apps/photoreal/socket/.unicorn.sock fail_timeout=0; 
    } 

    server { 
    # PageSpeed 
    pagespeed on; 
    pagespeed FileCachePath /var/ngx_pagespeed_cache; 
    location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { 
     add_header "" ""; 
    } 
    location ~ "^/ngx_pagespeed_static/" { } 
    location ~ "^/ngx_pagespeed_beacon$" { } 
    location /ngx_pagespeed_statistics { 
     allow 127.0.0.1; allow 5.228.169.73; deny all; 
    } 
    location /ngx_pagespeed_global_statistics { 
     allow 127.0.0.1; allow 5.228.169.73; deny all; 
    } 
    pagespeed MessageBufferSize 100000; 
    location /ngx_pagespeed_message { 
     allow 127.0.0.1; allow 5.228.169.73; deny all; 
    } 
    location /pagespeed_console { 
     allow 127.0.0.1; allow 5.228.169.73; deny all; 
    } 






    charset utf-8; 
    # enable one of the following if you're on Linux or FreeBSD 
    listen 80 default deferred; # for Linux 
    # listen 80 default accept_filter=httpready; # for FreeBSD 

    # If you have IPv6, you'll likely want to have two separate listeners. 
    # One on IPv4 only (the default), and another on IPv6 only instead 
    # of a single dual-stack listener. A dual-stack listener will make 
    # for ugly IPv4 addresses in $remote_addr (e.g ":ffff:10.0.0.1" 
    # instead of just "10.0.0.1") and potentially trigger bugs in 
    # some software. 
    # listen [::]:80 ipv6only=on; # deferred or accept_filter recommended 

    client_max_body_size 4G; 
    server_name _; 

    # ~2 seconds is often enough for most folks to parse HTML/CSS and 
    # retrieve needed images/icons/frames, connections are cheap in 
    # nginx so increasing this is generally safe... 
    keepalive_timeout 5; 

    # path for static files 
    root /var/www/apps/photoreal/current/public; 

    # Prefer to serve static files directly from nginx to avoid unnecessary 
    # data copies from the application server. 
    # 
    # try_files directive appeared in in nginx 0.7.27 and has stabilized 
    # over time. Older versions of nginx (e.g. 0.6.x) requires 
    # "if (!-f $request_filename)" which was less efficient: 
    # http://bogomips.org/unicorn.git/tree/examples/nginx.conf?id=v3.3.1#n127 
    try_files $uri/index.html $uri.html $uri @app; 

    location ~ ^/(assets)/ { 
     root /var/www/apps/photoreal/current/public; 

     expires max; 
     add_header Cache-Control public; 
    } 
    location @app { 
     # an HTTP header important enough to have its own Wikipedia entry: 
     # http://en.wikipedia.org/wiki/X-Forwarded-For 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

     # enable this if you forward HTTPS traffic to unicorn, 
     # this helps Rack set the proper URL scheme for doing redirects: 
     # proxy_set_header X-Forwarded-Proto $scheme; 

     # pass the Host: header from the client right along so redirects 
     # can be set properly within the Rack application 
     proxy_set_header Host $http_host; 

     # we don't want nginx trying to do something clever with 
     # redirects, we set the Host: header above already. 
     proxy_redirect off; 

     # set "proxy_buffering off" *only* for Rainbows! when doing 
     # Comet/long-poll/streaming. It's also safe to set if you're using 
     # only serving fast clients with Unicorn + nginx, but not slow 
     # clients. You normally want nginx to buffer responses to slow 
     # clients, even with Rails 3.1 streaming because otherwise a slow 
     # client can become a bottleneck of Unicorn. 
     # 
     # The Rack application may also set "X-Accel-Buffering (yes|no)" 
     # in the response headers do disable/enable buffering on a 
     # per-response basis. 
     # proxy_buffering off; 

     proxy_pass http://app_server; 
    } 

    # Rails error pages 
    error_page 500 502 503 504 /500.html; 
    location = /500.html { 
     root /var/www/apps/photoreal/current/public; 
    } 
    } 
} 

deploy.rb:

# config valid only for Capistrano 3.1 
lock '3.2.1' 

set :repo_url, '...' 
set :application, 'photoreal' 
application = 'photoreal' 
set :rvm_type, :user 
set :rvm_ruby_version, ' 2.0.0' 
set :deploy_to, '/var/www/apps/photoreal' 

set :rails_env, 'production' 

namespace :foreman do 
    desc 'Start server' 
    task :start do 
    on roles(:all) do 
     sudo "start #{application}" 
    end 
    end 

    desc 'Stop server' 
    task :stop do 
    on roles(:all) do 
     sudo "stop #{application}" 
    end 
    end 

    desc 'Restart server' 
    task :restart do 
    on roles(:all) do 
     sudo "restart #{application}" 
    end 
    end 

    desc 'Server status' 
    task :status do 
    on roles(:all) do 
     execute "initctl list | grep #{application}" 
    end 
    end 
end 

namespace :git do 
    desc 'Deploy' 
    task :deploy do 
    ask(:message, "Commit message?") 
    run_locally do 
     execute "git add -A" 
     execute "git commit -m '#{fetch(:message)}'" 
     execute "git push" 
    end 
    end 
end 




# Default branch is :master 
# ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }.call 

# Default deploy_to directory is /var/www/my_app 
# set :deploy_to, '/var/www/my_app' 

# Default value for :scm is :git 
# set :scm, :git 

# Default value for :format is :pretty 
# set :format, :pretty 

# Default value for :log_level is :debug 
# set :log_level, :debug 

# Default value for :pty is false 
# set :pty, true 

# Default value for :linked_files is [] 
# set :linked_files, %w{config/database.yml} 

# Default value for linked_dirs is [] 
# set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system} 

# Default value for default_env is {} 
# set :default_env, { path: "/opt/ruby/bin:$PATH" } 

# Default value for keep_releases is 5 
# set :keep_releases, 5 

namespace :deploy do 

    desc 'Setup' 
    task :setup do 
    on roles(:all) do 
     execute "mkdir #{shared_path}/config/" 
     execute "mkdir /var/www/apps/#{application}/run/" 
     execute "mkdir /var/www/apps/#{application}/log/" 
     execute "mkdir /var/www/apps/#{application}/socket/" 
     execute "mkdir #{shared_path}/system" 
     sudo "ln -s /var/log/upstart /var/www/log/upstart" 

     upload!('shared/database.yml', "#{shared_path}/config/database.yml") 

     upload!('shared/Procfile', "#{shared_path}/Procfile") 


     upload!('shared/nginx.conf', "#{shared_path}/nginx.conf") 
     #sudo 'sudo initctl stop nginx' 
     sudo "rm -f /usr/local/nginx/conf/nginx.conf" 
     sudo "ln -s #{shared_path}/nginx.conf /usr/local/nginx/conf/nginx.conf" 
     #sudo 'sudo initctl start nginx' 

     within release_path do 
     with rails_env: fetch(:rails_env) do 
      execute :rake, "db:create" 
     end 
     end 



    end 
    end 

    desc 'Create symlink' 
    task :symlink do 
    on roles(:all) do 
     execute "ln -s #{shared_path}/config/database.yml #{release_path}/config/database.yml" 
     execute "ln -s #{shared_path}/Procfile #{release_path}/Procfile" 
     execute "ln -s #{shared_path}/system #{release_path}/public/system" 
    end 
    end 

    desc 'Foreman init' 
    task :foreman_init do 
    on roles(:all) do 
     foreman_temp = "/var/www/tmp/foreman" 
     execute "mkdir -p #{foreman_temp}" 
     # Создаем папку current для того, чтобы foreman создавал upstart файлы с правильными путями 
     execute "ln -s #{release_path} #{current_path}" 

     within current_path do 
     execute "cd #{current_path}" 
     execute :bundle, "exec foreman export upstart #{foreman_temp} -a #{application} -u deployer -l /var/www/apps/#{application}/log -d #{current_path}" 
     end 
     sudo "mv #{foreman_temp}/* /etc/init/" 
     sudo "rm -r #{foreman_temp}" 
    end 
    end 


    desc 'Restart application' 
    task :restart do 
    on roles(:app), in: :sequence, wait: 5 do 
     sudo "restart #{application}" 
    end 
    end 

    after :finishing, 'deploy:cleanup' 
    after :finishing, 'deploy:restart' 

    after :updating, 'deploy:symlink' 

    after :setup, 'deploy:foreman_init' 

    after :foreman_init, 'foreman:start' 

    before :foreman_init, 'rvm:hook' 

    before :setup, 'deploy:starting' 
    before :setup, 'deploy:updating' 
    before :setup, 'bundler:install' 
end 

独角兽。 RB:

worker_processes 2 

working_directory "/var/www/apps/photoreal/current" # available in 0.94.0+ 

# listen on both a Unix domain socket and a TCP port, 
# we use a shorter backlog for quicker failover when busy 
listen "/var/www/apps/photoreal/socket/.unicorn.sock", :backlog => 64 
listen 8080, :tcp_nopush => true 

# nuke workers after 30 seconds instead of 60 seconds (the default) 
timeout 30 

# feel free to point this anywhere accessible on the filesystem 
pid "/var/www/apps/photoreal/run/unicorn.pid" 

# By default, the Unicorn logger will write to stderr. 
# Additionally, ome applications/frameworks log to stderr or stdout, 
# so prevent them from going to /dev/null when daemonized here: 
stderr_path "/var/www/apps/photoreal/log/unicorn.stderr.log" 
stdout_path "/var/www/apps/photoreal/log/unicorn.stdout.log" 

# combine Ruby 2.0.0dev or REE with "preload_app true" for memory savings 
# http://rubyenterpriseedition.com/faq.html#adapt_apps_for_cow 
preload_app true 
GC.respond_to?(:copy_on_write_friendly=) and 
    GC.copy_on_write_friendly = true 

# Enable this flag to have unicorn test client connections by writing the 
# beginning of the HTTP headers before calling the application. This 
# prevents calling the application for connections that have disconnected 
# while queued. This is only guaranteed to detect clients on the same 
# host unicorn runs on, and unlikely to detect disconnects even on a 
# fast LAN. 
check_client_connection false 

before_fork do |server, worker| 



    # the following is highly recomended for Rails + "preload_app true" 
    # as there's no need for the master process to hold a connection 

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

    # The following is only recommended for memory/DB-constrained 
    # installations. It is not needed if your system can house 
    # twice as many worker_processes as you have configured. 
    # 
    # # This allows a new master process to incrementally 
    # # phase out the old master process with SIGTTOU to avoid a 
    # # thundering herd (especially in the "preload_app false" case) 
    # # when doing a transparent upgrade. The last worker spawned 
    # # will then kill off the old master process with a SIGQUIT. 
    old_pid = "#{server.config[:pid]}.oldbin" 
    if old_pid != server.pid 
    begin 
     sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU 
     Process.kill(sig, File.read(old_pid).to_i) 
    rescue Errno::ENOENT, Errno::ESRCH 
    end 
    end 
    # 
    # Throttle the master from forking too quickly by sleeping. Due 
    # to the implementation of standard Unix signal handlers, this 
    # helps (but does not completely) prevent identical, repeated signals 
    # from being lost when the receiving process is busy. 
    # sleep 1 
end 

after_fork do |server, worker| 
    # per-process listener ports for debugging/admin/migrations 
    # addr = "127.0.0.1:#{9293 + worker.nr}" 
    # server.listen(addr, :tries => -1, :delay => 5, :tcp_nopush => true) 

    # the following is *required* for Rails + "preload_app true", 
    defined?(ActiveRecord::Base) and 
    ActiveRecord::Base.establish_connection 


    # if preload_app is true, then you may also want to check and 
    # restart any other shared sockets/descriptors such as Memcached, 
    # and Redis. TokyoCabinet file handles are safe to reuse 
    # between any number of forked children (assuming your kernel 
    # correctly implements pread()/pwrite() system calls) 
end 

nginx.error:

2014/09/01 08:02:46 [crit] 4697#0:* 1连接()到unix:/var/www/apps/photoreal/socket/.unicorn.sock失败(2:没有这样的文件或目录)当连接到上游时,客户端:178.76.217.203,服务器:_,请求:“GET/HTTP/1.1”,上游:“http:// unix:/var/www/apps/photoreal/socket/.unicorn.sock: /”,主持人: “45.65.32.1”

控制台:

$ netstat -an | grep unicorn 
$ ps aux | grep unicorn 
deployer 5061 0.0 0.0 2268 660 pts/0 S+ 08:12 0:00 grep --color=auto unicorn 

回答

0

好CONFIGS,但什么记录? :) 你在deploy.rb麒麟开始(暴发户)命令,检查这些命令部署日志(须藤“启动#{}申请”)

我想,期间出现了错误“命令启动照片般逼真的”

ps显示没有活动的独角兽进程,所以套接字不存在,nginx在尝试连接套接字时遇到错误(app_server;)

相关问题