2015-01-15 3 views
1

처음으로 nginx 및 unicorn을 설정합니다.상위 "app"에서 호스트를 찾을 수 없습니다. nginx가 환영 페이지에 붙어있는 앱을 제공하지 않습니다.

카피 스트라노 배포가 완료되어 모든 작업이 완료되었습니다.

here is my unicorn.rb 

#app_dir = File.expand_path('../../', __FILE__) 
#shared_dir = File.expand_path('../../../shared/', __FILE__) 

preload_app true 
worker_processes 4 
timeout 30 
working_directory "home/deploy/appname" 
shared_dir = "home/deploy/appname/shared" 

# Set up socket location 
# by default unicorn listens on 8080 
listen "#{shared_dir}/tmp/sockets/unicorn.sock", :backlog => 64 

# Logging 
stderr_path "#{shared_dir}/log/unicorn.stderr.log" 
stdout_path "#{shared_dir}/log/unicorn.stdout.log" 

# Set master PID location 
pid "#{shared_dir}/tmp/pids/unicorn.pid" 

#must set preload app true to use before/after fork 
before_fork do |server, worker| 
    defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! 

    #before forking, this is suppose to kill the master process that belongs to the oldbin 
    #enables 0 downtime to deploy 

    old_pid = "#{shared_dir}/tmp/pids/unicorn.pid.oldbin" 
    if File.exists?(old_pid) && server.pid != old_pid 
    begin 
     Process.kill("QUIT", File.read(old_pid).to_i) 
    rescue Errno::ENOENT, Errno::ESRCH 
    end 
    end 
end 

after_fork do |server, worker| 
    defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection 
end 

# before_exec do |server| 
# ENV['BUNDLE_GEMFILE'] = "#{app_dir}/Gemfile" 
# end 

에서 /etc/nginx/nginx.conf

user www-data; 
worker_processes 4; 
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; 


     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"; 

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

내 기본 파일에서 내의 nginx의 conf의/etc/nginx를/사이트 사용

upstream app_server { 
    #path to unicorn sock file, as defined previously 
    server unix:/home/deploy/appname/shared/tmp/sockets/unicorn.sock fail_timeout=0; 
} 

    server { 
     listen 80; 

     root /home/deploy/appname; 

    try_files $uri/index.html $uri @app; 

     #click tracking 
     access_log /var/log/nginx/appname_access.log combined; 

     error_log /var/log/nginx/appname_error.log; 

     location @app { 
      proxy_set_header X-Forwarded-For $remote_addr; 
      proxy_set_header Host $http_host; 
      proxy_redirect off; 
      proxy_pass http://app; 
     } 

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

내가/기본 이

[email protected]:~$ sudo nginx -s reload 
nginx: [emerg] host not found in upstream "app" in /etc/nginx/sites-enabled/default:46 

/shared/tmp/sockets 

여기에 파일이 없습니다. 저는 수동으로 만들어야한다고 생각하지 않습니다. 나는 카피 스트라 노 (capistrano) 3을 사용하고 있습니다.이 파일을 생성한다고 생각합니까? 내가 deploy.rb

상징적 인 파일과 디렉토리

set :linked_files, %w{config/database.yml config/secrets.yml} 
set :linked_dirs, %w{tmp/pids tmp/cache tmp/sockets log bin vendor/bundle public/system} 

#just pointing to our unicorn.rb 
set :unicorn_config_path, "config/unicorn.rb" 

#capistrano tasks and processes 

after "deploy", "deploy:cleanup" 

namespace :deploy do 

    desc 'Restart application' 
    task :restart do 
    on roles(:app), in: :sequence, wait: 5 do 
     invoke 'unicorn:restart' 
    end 
    end 

    after :finishing, "deploy:cleanup" 

end 

내 모자 유니콘 다시 시작할 때 더 로그를 알 수 없기 때문에 내가 여기 내 모자 파일을 넣어에서

require 'capistrano3/unicorn' #in capfile 

을 사용하고

프로덕션 배포 로그 나는 이것이 도움이되는지 확신하지 못한다.

working_directory가 기본 nginx 페이지의 루트와 일치하는지 확인했습니다. 유니콘의 수신 대기가 기본 페이지의 업스트림 응용 프로그램 서버 유닉스와 일치하는지 확인했습니다. nginx.conf 파일에 sites-enabled의 기본 config nginx 페이지가 포함되었는지 확인했습니다.

답변

3

글쎄, 6 개월 전이지만 어쨌든 대답하겠습니다. 문제는 sites_enabled/default의 @app에있는 proxy_pass입니다. 업스트림 서버 http://app으로 전달하려고 시도했지만 업스트림 세트가 없으므로 app_server라는 이름으로 지정합니다.

당신은 이름을 변경해야합니다 proxy_pass http://app

에 : proxy_pass http://app_server