You were right, the socket was not in a shared path... D'oh!

Thanks so much~

On Thu, May 19, 2011 at 2:27 AM, Eric Wong <[email protected]> wrote:
> Jason Su <[email protected]> wrote:
>> Hey guys,
>>
>> I'm sending USR2 to unicorn after cap deploy, and the old master is
>> getting replaced by a new master that doesn't work.
>
> Can you expand on "doesn't work"?
>
>> Here are some similar threads I found ...
>> http://rubyforge.org/pipermail/mongrel-unicorn/2010-October/000733.html
>> http://rubyforge.org/pipermail/mongrel-unicorn/2010-October/000717.html
>>
>> I'm not using Bundler, and I have working_directory set in my unicorn config:
>
> I don't see where you have working_directory set below
>
>> Unicorn::HttpServer::START_CTX[0] =
>> "/opt/ruby-enterprise-1.8.7-2010.02/bin/unicorn_rails"
>
> You shouldn't need to touch START_CTX unless you're switching Ruby
> installations.  It's rope to hang yourself with.
>
> I would simplify the config file as much as possible if you're
> debugging a problem.
>
>> pid "/var/www/lookbook/shared/pids/unicorn.pid"
>> stderr_path "/var/www/lookbook/shared/log/unicorn.stderr.log"
>> stdout_path "/var/www/lookbook/shared/log/unicorn.stdout.log"
>> preload_app true
>> if GC.respond_to?(:copy_on_write_friendly=)
>>   GC.copy_on_write_friendly = true
>> end
>> before_fork do |server, worker|
>>   STDERR.puts "BEFORE FORK:"
>>   STDERR.puts ENV.inspect
>>   defined?(ActiveRecord::Base) and
>>     ActiveRecord::Base.connection.disconnect!
>
> The auto-killing old workers bit is fragile and you shouldn't need
> it unless you're very low on memory.
>
>>   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
>>
>> end
>> after_fork do |server, worker|
>>   STDERR.puts "AFTER FORK:"
>>   STDERR.puts ENV.inspect
>>
>>   defined?(ActiveRecord::Base) and
>>     ActiveRecord::Base.establish_connection
>>   begin
>
> If you want to use user switching, the "user" directive which
> appeared a while back is much simpler and less error prone.
>
>>     uid, gid = Process.euid, Process.egid
>>     user, group = 'apache', 'apache'
>>     target_uid = Etc.getpwnam(user).uid
>>     target_gid = Etc.getgrnam(group).gid
>>     worker.tmp.chown(target_uid, target_gid)
>>     if uid != target_uid || gid != target_gid
>>       Process.initgroups(user, target_gid)
>>       Process::GID.change_privilege(target_gid)
>>       Process::UID.change_privilege(target_uid)
>>     end
>
> <snip>
>
>> Below is the output from unicorn.stderr.log.. I'm not sure if
>> UNICORN_FD has something to do with it?
>
> UNICORN_FD is absolutely for the old master tells the new master about
> the listener sockets to inherit.  Don't touch it.
>
> <snip>
>
>> 3) cap deploy with symlinks + restart unicorn (kill -USR2)
>
> <snip>
>
>> addr=/var/www/lookbook/current/tmp/sockets/unicorn.sock fd=3
>
> You should make sure your socket is in a shared path, not current.
>
> Whatever's in current gets replaced by Capistrano, right?  I'm not sure
> if tmp is a symlink that's relinked on a new deploy, but there could be
> a race condition where the path to the socket is unreachable and
> nginx can't see it.
>
> --
> Eric Wong
> _______________________________________________
> Unicorn mailing list - [email protected]
> http://rubyforge.org/mailman/listinfo/mongrel-unicorn
> Do not quote signatures (like this one) or top post when replying
>
_______________________________________________
Unicorn mailing list - [email protected]
http://rubyforge.org/mailman/listinfo/mongrel-unicorn
Do not quote signatures (like this one) or top post when replying

Reply via email to