2012-06-25 1 views
2

카피 스트라노 배치가 잘 작동하는 것처럼 보이지만 USR2 신호가 유니콘 프로세스로 보내지면 이전 릴리스 폴더에서 다시 시작됩니다. 이 문제는 여기에 다소 유사합니다이전 릴리스 디렉토리에서 유니콘 재시작

Restarting Unicorn with USR2 doesn't seem to reload production.rb settings

하지만, 내 working_directory는, 내가 공상 아무것도 아니에요 문자열로 설정됩니다.

내 생산 유니콘 설정 :

worker_processes 4 
working_directory "/u/apps/dragonfly-application/current" # available in 0.94.0+ 
listen "/tmp/.sock", :backlog => 64 
timeout 30 
pid "/u/apps/dragonfly-application/shared/pids/unicorn.pid" 
stderr_path "/u/apps/dragonfly-application/shared/log/unicorn.stderr.log" 
stdout_path "/u/apps/dragonfly-application/shared/log/unicorn.stdout.log" 

preload_app true 
GC.respond_to?(:copy_on_write_friendly=) and 
    GC.copy_on_write_friendly = true 

before_fork do |server, worker| 
    defined?(ActiveRecord::Base) and 
    ActiveRecord::Base.connection.disconnect! 

    old_pid = '/u/apps/dragonfly-application/shared/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 
      # someone else did our job for us 
     end 
     end 

end 

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

그리고 내 카피 스트라 노 배포 : 내가 볼 수있는 위치의 아이디어 나갈거야

set :application, "dragonfly-application" 
set :repository, "[email protected]:Rodeoclash/Nile.git" 
set :scm, :git 
set :user, "user" 
set :rvm_ruby_string, "[email protected]" 
set :bundle_flags, "--deployment --binstubs" 

server "202.2.94.221", :app, :web, :db, :primary => true 

before 'deploy:setup', 'rvm:install_rvm' 
before 'deploy:setup', 'rvm:install_ruby' 

after "deploy:finalize_update", "db:config" 
after "deploy:restart", "deploy:cleanup" # clean up old releases on each deploy 
after "deploy", "deploy:migrate" 
after 'deploy:update_code', 'symlink_uploads' 

load 'deploy/assets' 

namespace :db do 

    # copy database.yml into location 
    task :config, :except => { :no_release => true }, :role => :app do 
    run "cp -f #{shared_path}/config/database.yml #{release_path}/config/database.yml" 
    end 

    desc "reload the database with seed data" 
    task :seed do 
    run "cd #{current_path}; bundle exec rake db:seed RAILS_ENV=#{rails_env}" 
    end 

end 

task :symlink_uploads do 
    run "ln -nfs #{shared_path}/uploads #{release_path}/public/uploads" 
end 

require "bundler/capistrano" 
require 'capistrano-unicorn' 
require "rvm/capistrano" 

. 서버가 완전히 중지되었다가 다시 시작되면 올바른 폴더가 사용되지만 USR2 신호를 사용하면 심볼릭 링크에서 올바른 경로가 사용되지 않습니다. config를로드 할 때 심볼릭 링크를 해결하고 코드가 다시 시작될 때까지 다시 해석하지 않는 것과 같습니다.

저는 RVM을 사용하고 있습니다.

답변

6

심볼 링크를 해결하려는 레이크 작업 중 하나에서 "Rails.root"에 대한 참조가있었습니다. 이를 공유 디렉토리에 대한 하드 코드 된 참조로 바꾸면 효과가있었습니다.

+0

답변으로 선택하여 해결 된 카테고리에 표시되도록하십시오! – WedTM