unicorn Ruby/Rack server user+dev discussion/patches/pulls/bugs/help
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [ANN] unicorn 0.95.1 - we <3 symlink deployments more
@ 2009-11-21 22:00  7% Eric Wong
  0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2009-11-21 22:00 UTC (permalink / raw)
  To: mongrel-unicorn, ruby-talk

Unicorn is an HTTP server for Rack applications designed to only serve
fast clients on low-latency, high-bandwidth connections and take
advantage of features in Unix/Unix-like kernels.  Slow clients should
only be served by placing a reverse proxy capable of fully buffering
both the the request and response in between Unicorn and slow clients.

* http://unicorn.bogomips.org/
* mongrel-unicorn@rubyforge.org
* git://git.bogomips.org/unicorn.git

Changes:

Configuration files paths given on the command-line are no
longer expanded.  This should make configuration reloads
possible when a non-absolute path is specified for --config-file
and Unicorn was deployed to a symlink directories (as with
Capistrano).  Since deployments have always been strongly
encouraged to use absolute paths in the config file, this
change does not affect absolute path users.

This is our first gem release using gemcutter.  And we *just*
got it working while I was writing this message :>

Eric Wong (3):
      SIGNALS: HUP + preload_app cannot reload app code
      Do not expand paths given on the shell
      GNUmakefile: prep release process for gemcutter

-- 
Eric Wong

^ permalink raw reply	[relevance 7%]

* Re: unicorn, rails, and symlinked deployment
  @ 2009-11-19  1:51  6%       ` Eric Wong
  0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2009-11-19  1:51 UTC (permalink / raw)
  To: unicorn list

Eric Wong <normalperson@yhbt.net> wrote:
> Michael Guterl <mguterl@gmail.com> wrote:
> > cd ~/public_html/rm/current
> > unicorn_rails -D -E production -c config/unicorn.rb
> > 
> > I determined the -c config/unicorn.rb was the problem.  If I change it to:
> > 
> > unicorn_rails -D -E production -c ~/public_html/rm/current/config/unicorn.rb
> > 
> > everything works fine.
> 
> Hmm, maybe the config file path shouldn't be expanded then.  Especially
> since it's only specified in the command-line.  /me ponders a bit...

Hi Michael,

Just pushed this out, too.  This should work better for you with:

  unicorn_rails -D -E production -c config/unicorn.rb

Oddly, this has been a problem since the beginning of time and probably
confused a good amount of people.

Thanks Michael for finally bringing it to my attention.  Most folks I
know favor absolute ones (including myself), and don't hit this
problem...  Of course let me know if I broke something for anyone,
I hope not...

>From 15217fe1162a400fa1cd2216e395d9f17be8083e Mon Sep 17 00:00:00 2001
From: Eric Wong <normalperson@yhbt.net>
Date: Wed, 18 Nov 2009 17:28:12 -0800
Subject: [PATCH] Do not expand paths given on the shell

Shells already expand '~' before the executables see it, and
relative paths inside symlinks can get set incorrectly to the
actual directory name, and not the (usually desired) symlink
name for things like Capistrano.

Since our paths are now unexpanded, we must now check the
"working_directory" directive and raise an error if the user
specifies the config file in a way that makes the config file
unreloadable.
---
 bin/unicorn                 |    4 +-
 bin/unicorn_rails           |    2 +-
 lib/unicorn/configurator.rb |    7 ++++++
 test/exec/test_exec.rb      |   51 +++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 61 insertions(+), 3 deletions(-)

diff --git a/bin/unicorn b/bin/unicorn
index 225e819..325afb3 100755
--- a/bin/unicorn
+++ b/bin/unicorn
@@ -68,7 +68,7 @@ opts = OptionParser.new("", 24, '  ') do |opts|
   opts.on("-P", "--pid FILE", "DEPRECATED") do |f|
     warn %q{Use of --pid/-P is strongly discouraged}
     warn %q{Use the 'pid' directive in the Unicorn config file instead}
-    options[:pid] = File.expand_path(f)
+    options[:pid] = f
   end
 
   opts.on("-s", "--server SERVER",
@@ -85,7 +85,7 @@ opts = OptionParser.new("", 24, '  ') do |opts|
   end
 
   opts.on("-c", "--config-file FILE", "Unicorn-specific config file") do |f|
-    options[:config_file] = File.expand_path(f)
+    options[:config_file] = f
   end
 
   # I'm avoiding Unicorn-specific config options on the command-line.
diff --git a/bin/unicorn_rails b/bin/unicorn_rails
index 36ed660..e46de70 100755
--- a/bin/unicorn_rails
+++ b/bin/unicorn_rails
@@ -75,7 +75,7 @@ opts = OptionParser.new("", 24, '  ') do |opts|
   end
 
   opts.on("-c", "--config-file FILE", "Unicorn-specific config file") do |f|
-    options[:config_file] = File.expand_path(f)
+    options[:config_file] = f
   end
 
   opts.on("-P PATH", "DEPRECATED") do |v|
diff --git a/lib/unicorn/configurator.rb b/lib/unicorn/configurator.rb
index 2d92aa3..e809b22 100644
--- a/lib/unicorn/configurator.rb
+++ b/lib/unicorn/configurator.rb
@@ -372,6 +372,13 @@ module Unicorn
     def working_directory(path)
       # just let chdir raise errors
       path = File.expand_path(path)
+      if config_file &&
+         config_file[0] != ?/ &&
+         ! test(?r, "#{path}/#{config_file}")
+        raise ArgumentError,
+              "config_file=#{config_file} would not be accessible in" \
+              " working_directory=#{path}"
+      end
       Dir.chdir(path)
       HttpServer::START_CTX[:cwd] = ENV["PWD"] = path
     end
diff --git a/test/exec/test_exec.rb b/test/exec/test_exec.rb
index f6dfd6a..49762c0 100644

<snip ridiculously verbose test case>
-- 
Eric Wong

^ permalink raw reply related	[relevance 6%]

Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2009-11-17 17:50     unicorn, rails, and symlinked deployment Michael Guterl
2009-11-17 22:20     ` Eric Wong
2009-11-18 15:34       ` Michael Guterl
2009-11-18 17:21         ` Eric Wong
2009-11-19  1:51  6%       ` Eric Wong
2009-11-21 22:00  7% [ANN] unicorn 0.95.1 - we <3 symlink deployments more Eric Wong

Code repositories for project(s) associated with this public inbox

	https://yhbt.net/unicorn.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).